[Engine-devel] Update on UI Plugins feature: PoC patch revision 2

<li>assume the user logs out, plugin invocation is disabled, until the use= r logs in again</li><li>user logs in again, but <span style=3D"font-style: = italic;">UiInit</span> isn't called now because it has been called already = before</li><li>goto step 6<br></li></ol>The reason why <span style=3D"font-=
use <span style=3D"font-style: italic;">UiInit</span> event to extend UI (= add main tab, etc.)</li><li>define other events (table context menu event, = etc.)<br></li><li>allow plugins to do REST API calls through <span style=3D= "font-style: italic;">pluginApi</span> object<br></li></ul>I've tried to im=
------=_Part_7830015_289327145.1344531366470 Content-Type: multipart/alternative; boundary="----=_Part_7830016_818349207.1344531366470" ------=_Part_7830016_818349207.1344531366470 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Hi guys, I've improved the original plugin infrastructure, please find the 2nd revision of UI Plugins proof-of-concept (PoC) patch attached. Here's a quick summary of changes: * PluginSourcePageServlet looks up the actual plugin code in local filesystem (<pluginName>.js), so you can experiment with different plugins. If you want to add new plugins, just modify WebadminDynamicHostingServlet.writeAdditionalJsData() method. * PluginManager now calls UiInit function on plugins (plugin objects) within the scope of WebAdmin main section (user has logged in, main section UI is initialized and ready), and disables plugin execution outside main section (e.g. when the user logs out) . (Please find a sample plugin code attached as well. PluginSourcePageServlet tries to load it from a hard-coded location in local filesystem, you probably want to modify this to suit your environment.) UiInit function is a special event handler function that gets called once, after plugin reports as ready, and before other event handler functions are called. UiInit function would be a good place to extend default WebAdmin UI (adding main tab, etc.). This is illustrated on the following use case: 1. user requests WebAdmin page, during initialization a plugin iframe gets created and attached to DOM, plugin HTML page gets requested asynchronously, application init code still runs so iframe plugin code evaluation is blocked (this is because of JavaScript runtime being single-threaded in its nature) 2. application init code finishes, plugin code gets evaluated, plugin registers itself into pluginApi.plugins and reports back as ready (calls the ready function) 3. since the user is still in login section (not logged into WebAdmin), plugin invocation is disabled, until the user logs in 4. user logs into the application, UI redirects to main section, and after UI gets initialized, plugin invocation is enabled 5. UiInit function is called on the plugin 6. <NOT IMPLEMENTED YET> user performs some actions and WebAdmin calls different functions on the plugin 7. assume the user logs out, plugin invocation is disabled, until the user logs in again 8. user logs in again, but UiInit isn't called now because it has been called already before 9. goto step 6 The reason why UiInit is called just once (after visiting main section for the first time), is because WebAdmin UI (Views) are mostly singletons, so even when you switch to different section (login section) and go to main section again, singleton Views will still be there, with any adjustments/extensions made previously by plugins. Now, as for the next steps, we can proceed with actual tasks Itamar outlined in his email: * use UiInit event to extend UI (add main tab, etc.) * define other events (table context menu event, etc.) * allow plugins to do REST API calls through pluginApi object I've tried to implement "add main tab" functionality. Unfortunately, this isn't quite easy to do with GWT-Platform (GWTP) framework we use. Each tab in WebAdmin has some place (GWT history token = URL hash fragment) associated. The way GWTP handles tabs is that individual tabs (Presenter) reveal themselves into tab container (TabContainerPresenter), with presenter reveal flow being processed bottom-up. I strongly suggest to go through [http://code.google.com/p/gwt-platform/wiki/GettingStarted] to get some basic understanding of GWTP framework and how tabs work in general. Long story short, to add tabs dynamically in a proper way, we need to write custom presenter proxy, here are some links on this matter: Discussion [https://groups.google.com/forum/#!topic/gwt-platform/aJrGOf9Gu04/discussion ] Dynamic tab example [http://code.google.com/r/goudreauchristian-update/source/browse/ ] Working demo [http://olivier.monaco.free.fr/lab/gwtp-editor/] So adding main/sub tabs is a task that will require some additional work, especially since we wish to combine both static tabs and dynamic tabs in one tab container. I'll try to work on this one. On the other hand, it would be great if others could take the latest PoC patch (attached), and experiment with other stuff like context menu events, REST API calls, etc. You can always reach me on #ovirt (vszocs) if you have a question or need help with anything. Cheers, Vojtech ------=_Part_7830016_818349207.1344531366470 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable <html><head><style type=3D'text/css'>p { margin: 0; }</style></head><body><= div style=3D'font-family: times new roman,new york,times,serif; font-size: = 12pt; color: #000000'>Hi guys,<br><br>I've improved the original plugin inf= rastructure, please find the 2nd revision of UI Plugins proof-of-concept (P= oC) patch attached.<br><br>Here's a quick summary of changes:<br><ul><li>Pl= uginSourcePageServlet looks up the actual plugin code in local filesystem (= <pluginName>.js), so you can experiment with different plugins. If yo= u want to add new plugins, just modify WebadminDynamicHostingServlet.writeA= dditionalJsData() method.</li><li>PluginManager now calls <em>UiInit</em> f= unction on plugins (plugin objects) within the scope of WebAdmin main secti= on (user has logged in, main section UI is initialized and ready), and disa= bles plugin execution outside main section (e.g. when the user logs out).<b= r></li></ul>(Please find a sample plugin code attached as well. PluginSourc= ePageServlet tries to load it from a hard-coded location in local filesyste= m, you probably want to modify this to suit your environment.)<br><br><span= style=3D"font-style: italic;">UiInit</span> function is a special event ha= ndler function that gets called once, after plugin reports as ready, and be= fore other event handler functions are called. <span style=3D"font-style: i= talic;">UiInit</span> function would be a good place to extend default WebA= dmin UI (adding main tab, etc.).<br><br>This is illustrated on the followin= g use case:<br><ol><li>user requests WebAdmin page, during initialization a= plugin iframe gets created and attached to DOM, plugin HTML page gets requ= ested asynchronously, application init code still runs so iframe plugin cod= e evaluation is blocked (this is because of JavaScript runtime being single= -threaded in its nature)</li><li>application init code finishes, plugin cod= e gets evaluated, plugin registers itself into <span style=3D"font-style: i= talic;">pluginApi.plugins</span> and reports back as ready (calls the <span= style=3D"font-style: italic;">ready</span> function)</li><li>since the use= r is still in login section (not logged into WebAdmin), plugin invocation i= s disabled, until the user logs in</li><li>user logs into the application, = UI redirects to main section, and after UI gets initialized, plugin invocat= ion is enabled</li><li><span style=3D"font-style: italic;">UiInit</span> fu= nction is called on the plugin</li><li><NOT IMPLEMENTED YET> user per= forms some actions and WebAdmin calls different functions on the plugin</li= style: italic;">UiInit</span> is called just once (after visiting main sect= ion for the first time), is because WebAdmin UI (Views) are mostly singleto= ns, so even when you switch to different section (login section) and go to = main section again, singleton Views will still be there, with any adjustmen= ts/extensions made previously by plugins.<br><br>Now, as for the next steps= , we can proceed with actual tasks Itamar outlined in his email:<br><ul><li= plement "add main tab" functionality. Unfortunately, this isn't quite easy = to do with GWT-Platform (GWTP) framework we use. Each tab in WebAdmin has s= ome place (GWT history token =3D URL hash fragment) associated. The way GWT= P handles tabs is that individual tabs (Presenter) reveal themselves into t= ab container (TabContainerPresenter), with presenter reveal flow being proc= essed bottom-up. I strongly suggest to go through [http://code.google.com/p= /gwt-platform/wiki/GettingStarted] to get some basic understanding of GWTP = framework and how tabs work in general.<br><br>Long story short, to add tab= s dynamically in a proper way, we need to write custom presenter proxy, her= e are some links on this matter:<br>Discussion [https://groups.google.com/f= orum/#!topic/gwt-platform/aJrGOf9Gu04/discussion]<br>Dynamic tab example [h= ttp://code.google.com/r/goudreauchristian-update/source/browse/]<br>Working= demo [http://olivier.monaco.free.fr/lab/gwtp-editor/]<br><br>So adding mai= n/sub tabs is a task that will require some additional work, especially sin= ce we wish to combine both static tabs and dynamic tabs in one tab containe= r. I'll try to work on this one.<br><br>On the other hand, it would be grea= t if others could take the latest PoC patch (attached), and experiment with= other stuff like context menu events, REST API calls, etc. You can always = reach me on #ovirt (vszocs) if you have a question or need help with anythi= ng.<br><br>Cheers,<br>Vojtech<br><br></div></body></html> ------=_Part_7830016_818349207.1344531366470-- ------=_Part_7830015_289327145.1344531366470 Content-Type: application/octet-stream; name=myPlugin.js.example Content-Disposition: attachment; filename=myPlugin.js.example Content-Transfer-Encoding: base64 d2luZG93LmFsZXJ0KCdJbnZva2luZyBhY3R1YWwgcGx1Z2luIGNvZGUhJyk7CndpbmRvdy5hbGVy dCgnUmVhZGluZyBwbHVnaW4gY29uZmlndXJhdGlvbjogJyArIHBsdWdpbkNvbmZpZy5mb28pOwoK cGx1Z2luQXBpLnBsdWdpbnNbJ215UGx1Z2luJ10gPSB7CiAgICAgICAgVWlJbml0OiBmdW5jdGlv bigpIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5hbGVydCgnV29vaG9vLCBVaUluaXQgcmVhY2hl ZCEnKTsKICAgICAgICB9Cn07CgpwbHVnaW5BcGkucmVhZHkoJ215UGx1Z2luJyk7Cg== ------=_Part_7830015_289327145.1344531366470 Content-Type: text/x-patch; name=0001-WIP-UI-Plugins-PoC-revision-2.patch Content-Disposition: attachment; filename=0001-WIP-UI-Plugins-PoC-revision-2.patch Content-Transfer-Encoding: base64 RnJvbSA2OGEzNjc1NWMxZjg1ODgyMjRkZTBjZTM2OTEwYzU3NGIzM2E2NGU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWb2p0ZWNoIFN6b2NzIDx2c3pvY3NAcmVkaGF0LmNvbT4KRGF0 ZTogVGh1LCAxOSBKdWwgMjAxMiAxNDo0ODo0MCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFdJUDog VUkgUGx1Z2lucyBQb0MsIHJldmlzaW9uIDIKCkNoYW5nZS1JZDogSWQyODgxMmRkYmU5MDU3NGRl MDE3OGYwYzA3ZGE3MTNmZTlmZDhjZGEKU2lnbmVkLW9mZi1ieTogVm9qdGVjaCBTem9jcyA8dnN6 b2NzQHJlZGhhdC5jb20+Ci0tLQogLi4uL3NlcnZlci9nd3QvR3d0RHluYW1pY0hvc3RQYWdlU2Vy dmxldC5qYXZhICAgICAgfCAgICAxICsKIC4uLi9zZXJ2ZXIvZ3d0L1BsdWdpblNvdXJjZVBhZ2VT ZXJ2bGV0LmphdmEgICAgICAgIHwgIDExMSArKysrKysrKysrKwogLi4uL3NlcnZlci9nd3QvV2Vi YWRtaW5EeW5hbWljSG9zdGluZ1NlcnZsZXQuamF2YSAgfCAgICA0ICsKIC4uLi9vdmlydC9lbmdp bmUvdWkvd2ViYWRtaW4vZ2luL1N5c3RlbU1vZHVsZS5qYXZhIHwgICAgNCArCiAuLi4vdWkvd2Vi YWRtaW4vcGx1Z2luL1BsdWdpbkRlZmluaXRpb25zLmphdmEgICAgICB8ICAgMzAgKysrCiAuLi4v dWkvd2ViYWRtaW4vcGx1Z2luL1BsdWdpbkV2ZW50SGFuZGxlci5qYXZhICAgICB8ICAgMjMgKysr CiAuLi4vZW5naW5lL3VpL3dlYmFkbWluL3BsdWdpbi9QbHVnaW5NYW5hZ2VyLmphdmEgICB8ICAx OTkgKysrKysrKysrKysrKysrKysrKysKIC4uLi9tYWluL3ByZXNlbnRlci9NYWluU2VjdGlvblBy ZXNlbnRlci5qYXZhICAgICAgIHwgICAxNyArKy0KIC4uLi93ZWJhZG1pbi9zcmMvbWFpbi93ZWJh cHAvV0VCLUlORi93ZWIueG1sICAgICAgIHwgICAxMCArCiA5IGZpbGVzIGNoYW5nZWQsIDM5OCBp bnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGZyb250ZW5k L3dlYmFkbWluL21vZHVsZXMvZnJvbnRlbmQvc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5l L3VpL2Zyb250ZW5kL3NlcnZlci9nd3QvUGx1Z2luU291cmNlUGFnZVNlcnZsZXQuamF2YQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGZyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21h aW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3BsdWdpbi9QbHVnaW5EZWZpbml0 aW9ucy5qYXZhCiBjcmVhdGUgbW9kZSAxMDA2NDQgZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93 ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vcGx1Z2lu L1BsdWdpbkV2ZW50SGFuZGxlci5qYXZhCiBjcmVhdGUgbW9kZSAxMDA2NDQgZnJvbnRlbmQvd2Vi YWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkv d2ViYWRtaW4vcGx1Z2luL1BsdWdpbk1hbmFnZXIuamF2YQoKZGlmZiAtLWdpdCBhL2Zyb250ZW5k L3dlYmFkbWluL21vZHVsZXMvZnJvbnRlbmQvc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5l L3VpL2Zyb250ZW5kL3NlcnZlci9nd3QvR3d0RHluYW1pY0hvc3RQYWdlU2VydmxldC5qYXZhIGIv ZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy9mcm9udGVuZC9zcmMvbWFpbi9qYXZhL29yZy9vdmly dC9lbmdpbmUvdWkvZnJvbnRlbmQvc2VydmVyL2d3dC9Hd3REeW5hbWljSG9zdFBhZ2VTZXJ2bGV0 LmphdmEKaW5kZXggZjE5NzM5YS4uNjg1ZTY4NSAxMDA2NDQKLS0tIGEvZnJvbnRlbmQvd2ViYWRt aW4vbW9kdWxlcy9mcm9udGVuZC9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvZnJv bnRlbmQvc2VydmVyL2d3dC9Hd3REeW5hbWljSG9zdFBhZ2VTZXJ2bGV0LmphdmEKKysrIGIvZnJv bnRlbmQvd2ViYWRtaW4vbW9kdWxlcy9mcm9udGVuZC9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9l bmdpbmUvdWkvZnJvbnRlbmQvc2VydmVyL2d3dC9Hd3REeW5hbWljSG9zdFBhZ2VTZXJ2bGV0Lmph dmEKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljIGFic3RyYWN0IGNsYXNzIEd3dER5bmFtaWNIb3N0 UGFnZVNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAgICAgcHJvdGVjdGVkIHZvaWQgZG9H ZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9u c2UpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFByaW50V3JpdGVyIHdyaXRlciA9IHJl c3BvbnNlLmdldFdyaXRlcigpOwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4 dC9odG1sOyBjaGFyc2V0PVVURi04Iik7IC8vJE5PTi1OTFMtMSQKKyAgICAgICAgcmVzcG9uc2Uu c2V0SGVhZGVyKCJDYWNoZS1Db250cm9sIiwgIm5vLWNhY2hlIik7IC8vJE5PTi1OTFMtMSQgLy8k Tk9OLU5MUy0yJAogCiAgICAgICAgIHdyaXRlci5hcHBlbmQoIjwhRE9DVFlQRSBodG1sPjxodG1s PjxoZWFkPiIpOyAvLyROT04tTkxTLTEkCiAgICAgICAgIHdyaXRlci5hcHBlbmQoIjxtZXRhIGh0 dHAtZXF1aXY9XCJjb250ZW50LXR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PVVU Ri04XCI+Iik7IC8vJE5PTi1OTFMtMSQKZGlmZiAtLWdpdCBhL2Zyb250ZW5kL3dlYmFkbWluL21v ZHVsZXMvZnJvbnRlbmQvc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL2Zyb250ZW5k L3NlcnZlci9nd3QvUGx1Z2luU291cmNlUGFnZVNlcnZsZXQuamF2YSBiL2Zyb250ZW5kL3dlYmFk bWluL21vZHVsZXMvZnJvbnRlbmQvc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL2Zy b250ZW5kL3NlcnZlci9nd3QvUGx1Z2luU291cmNlUGFnZVNlcnZsZXQuamF2YQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDM0MmE4Ci0tLSAvZGV2L251bGwKKysrIGIvZnJv bnRlbmQvd2ViYWRtaW4vbW9kdWxlcy9mcm9udGVuZC9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9l bmdpbmUvdWkvZnJvbnRlbmQvc2VydmVyL2d3dC9QbHVnaW5Tb3VyY2VQYWdlU2VydmxldC5qYXZh CkBAIC0wLDAgKzEsMTExIEBACitwYWNrYWdlIG9yZy5vdmlydC5lbmdpbmUudWkuZnJvbnRlbmQu c2VydmVyLmd3dDsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2 YS5pby5CdWZmZXJlZFdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5p by5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBq YXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3Jp dGVyOworaW1wb3J0IGphdmEuaW8uUmVhZGVyOworaW1wb3J0IGphdmEuaW8uV3JpdGVyOworaW1w b3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBq YXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRw Lkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZs ZXRSZXNwb25zZTsKKworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKK2lt cG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OworCisvKioKKyAqIFJl bmRlcnMgdGhlIEhUTUwgc291cmNlIHBhZ2UgZm9yIHRoZSBnaXZlbiBVSSBwbHVnaW4uCisgKi8K K3B1YmxpYyBjbGFzcyBQbHVnaW5Tb3VyY2VQYWdlU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0 IHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFM OworCisgICAgcHJpdmF0ZSBzdGF0aWMgTG9nIGxvZ2dlciA9IExvZ0ZhY3RvcnkuZ2V0TG9nKFBs dWdpblNvdXJjZVBhZ2VTZXJ2bGV0LmNsYXNzKTsKKworICAgIEBPdmVycmlkZQorICAgIHByb3Rl Y3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJl c3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAvLyBSZWFkIHBs dWdpbiBuYW1lIGFzIEhUVFAgcmVxdWVzdCBwYXJhbWV0ZXIKKyAgICAgICAgU3RyaW5nIHBsdWdp bk5hbWUgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigicGx1Z2luIik7IC8vJE5PTi1OTFMtMSQKKyAg ICAgICAgaWYgKHBsdWdpbk5hbWUgPT0gbnVsbCkgeworICAgICAgICAgICAgbG9nZ2VyLmVycm9y KCJNaXNzaW5nIHBsdWdpbiBuYW1lIHJlcXVlc3QgcGFyYW1ldGVyIik7IC8vJE5PTi1OTFMtMSQK KyAgICAgICAgICAgIHJlc3BvbnNlLnNlbmRFcnJvcihIdHRwU2VydmxldFJlc3BvbnNlLlNDX0JB RF9SRVFVRVNUKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8v IExvY2F0ZSBwbHVnaW4gY29kZSBpbiBsb2NhbCBmaWxlIHN5c3RlbQorICAgICAgICAvLyBUT0RP IGhhcmQtY29kZWQgcGx1Z2luIGxvY2F0aW9uCisgICAgICAgIEZpbGUgcGx1Z2luQ29kZUxvY2F0 aW9uID0gbmV3IEZpbGUoIi9ob21lL3Zzem9jcy9Eb3dubG9hZHMiKTsgLy8kTk9OLU5MUy0xJAor ICAgICAgICBGaWxlIHBsdWdpbkNvZGVGaWxlID0gbmV3IEZpbGUocGx1Z2luQ29kZUxvY2F0aW9u LCBwbHVnaW5OYW1lICsgIi5qcyIpOyAvLyROT04tTkxTLTEkCisgICAgICAgIGlmICghcGx1Z2lu Q29kZUZpbGUuaXNGaWxlKCkgfHwgIXBsdWdpbkNvZGVGaWxlLmNhblJlYWQoKSkgeworICAgICAg ICAgICAgbG9nZ2VyLmVycm9yKCJDYW5ub3QgcmVhZCBwbHVnaW4gY29kZTogIiArIHBsdWdpbkNv ZGVGaWxlLmdldEFic29sdXRlUGF0aCgpKTsgLy8kTk9OLU5MUy0xJAorICAgICAgICAgICAgcmVz cG9uc2Uuc2VuZEVycm9yKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfTk9UX0ZPVU5EKTsKKyAgICAg ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRPRE8gc2ltdWxhdGUgcGx1 Z2luIGRlcGVuZGVuY2llcworICAgICAgICBMaXN0PFN0cmluZz4gcGx1Z2luRGVwZW5kZW5jeUxp c3QgPQorICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QoImh0dHBzOi8vYWpheC5nb29nbGVh cGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuNy4yL2pxdWVyeS5taW4uanMiKTsgLy8kTk9OLU5M Uy0xJAorCisgICAgICAgIC8vIFRPRE8gc2ltdWxhdGUgcGx1Z2luIGNvbmZpZ3VyYXRpb24KKyAg ICAgICAgU3RyaW5nIHBsdWdpbkNvbmZpZ3VyYXRpb25PYmplY3QgPSAieyBcImZvb1wiOiAxMjMg fSI7IC8vJE5PTi1OTFMtMSQKKworICAgICAgICAvLyBSZW5kZXIgSFRNTCBzb3VyY2UgcGFnZSB0 byB0aGUgb3V0cHV0CisgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7 IGNoYXJzZXQ9VVRGLTgiKTsgLy8kTk9OLU5MUy0xJAorICAgICAgICByZXNwb25zZS5zZXRIZWFk ZXIoIkNhY2hlLUNvbnRyb2wiLCAibm8tY2FjaGUiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxT LTIkCisKKyAgICAgICAgUmVhZGVyIGluID0gbnVsbDsKKyAgICAgICAgV3JpdGVyIG91dCA9IG51 bGw7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVy KG5ldyBJbnB1dFN0cmVhbVJlYWRlcihuZXcgRmlsZUlucHV0U3RyZWFtKHBsdWdpbkNvZGVGaWxl KSwgIlVURi04IikpOyAvLyROT04tTkxTLTEkCisgICAgICAgICAgICBvdXQgPSBuZXcgQnVmZmVy ZWRXcml0ZXIobmV3IE91dHB1dFN0cmVhbVdyaXRlcihyZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0o KSwgIlVURi04IikpOyAvLyROT04tTkxTLTEkCisKKyAgICAgICAgICAgIHJlbmRlclBsdWdpblNv dXJjZVBhZ2UoaW4sIHBsdWdpbkRlcGVuZGVuY3lMaXN0LCBwbHVnaW5Db25maWd1cmF0aW9uT2Jq ZWN0LCBvdXQpOworICAgICAgICAgICAgb3V0LmZsdXNoKCk7CisgICAgICAgIH0gZmluYWxseSB7 CisgICAgICAgICAgICBpZiAoaW4gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGluLmNsb3Nl KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHJlbmRlclBs dWdpblNvdXJjZVBhZ2UoUmVhZGVyIHBsdWdpbkNvZGVJbnB1dCwgTGlzdDxTdHJpbmc+IHBsdWdp bkRlcGVuZGVuY3lMaXN0LAorICAgICAgICAgICAgU3RyaW5nIHBsdWdpbkNvbmZpZ3VyYXRpb25P YmplY3QsIFdyaXRlciBvdXRwdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIG91dHB1 dC53cml0ZSgiPCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+Iik7IC8vJE5PTi1OTFMtMSQKKyAg ICAgICAgb3V0cHV0LndyaXRlKCI8bWV0YSBodHRwLWVxdWl2PVwiY29udGVudC10eXBlXCIgY29u dGVudD1cInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOFwiPiIpOyAvLyROT04tTkxTLTEkCisKKyAg ICAgICAgZm9yIChTdHJpbmcgZGVwZW5kZW5jeSA6IHBsdWdpbkRlcGVuZGVuY3lMaXN0KSB7Cisg ICAgICAgICAgICBvdXRwdXQud3JpdGUoIjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwi IHNyYz1cIiIpOyAvLyROT04tTkxTLTEkCisgICAgICAgICAgICBvdXRwdXQud3JpdGUoZGVwZW5k ZW5jeSk7CisgICAgICAgICAgICBvdXRwdXQud3JpdGUoIlwiPjwvc2NyaXB0PiIpOyAvLyROT04t TkxTLTEkCisgICAgICAgIH0KKworICAgICAgICBvdXRwdXQud3JpdGUoIjwvaGVhZD48Ym9keT4i KTsgLy8kTk9OLU5MUy0xJAorICAgICAgICBvdXRwdXQud3JpdGUoIjxzY3JpcHQgdHlwZT1cInRl eHQvamF2YXNjcmlwdFwiPiIpOyAvLyROT04tTkxTLTEkCisgICAgICAgIG91dHB1dC53cml0ZSgi KGZ1bmN0aW9uKCBwbHVnaW5BcGksIHBsdWdpbkNvbmZpZyApIHsiKTsgLy8kTk9OLU5MUy0xJAor CisgICAgICAgIGNvcHlDaGFycyhwbHVnaW5Db2RlSW5wdXQsIG91dHB1dCk7CisKKyAgICAgICAg b3V0cHV0LndyaXRlKCJ9KSAoIHBhcmVudC5wbHVnaW5BcGksICIpOyAvLyROT04tTkxTLTEkCisg ICAgICAgIG91dHB1dC53cml0ZShwbHVnaW5Db25maWd1cmF0aW9uT2JqZWN0KTsKKyAgICAgICAg b3V0cHV0LndyaXRlKCIgKTsiKTsgLy8kTk9OLU5MUy0xJAorICAgICAgICBvdXRwdXQud3JpdGUo Ijwvc2NyaXB0PiIpOyAvLyROT04tTkxTLTEkCisgICAgICAgIG91dHB1dC53cml0ZSgiPC9ib2R5 PjwvaHRtbD4iKTsgLy8kTk9OLU5MUy0xJAorICAgIH0KKworICAgIHZvaWQgY29weUNoYXJzKFJl YWRlciBpbiwgV3JpdGVyIG91dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgY2hhcltd IGJ1ZmZlciA9IG5ldyBjaGFyWzQgKiAxMDI0XTsgLy8gVXNlIDQga0IgYnVmZmVyCisgICAgICAg IGludCBudW1SZWFkID0gMDsKKworICAgICAgICB3aGlsZSAoKG51bVJlYWQgPSBpbi5yZWFkKGJ1 ZmZlciwgMCwgYnVmZmVyLmxlbmd0aCkpID4gMCkgeworICAgICAgICAgICAgb3V0LndyaXRlKGJ1 ZmZlciwgMCwgbnVtUmVhZCk7CisgICAgICAgIH0KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2Zy b250ZW5kL3dlYmFkbWluL21vZHVsZXMvZnJvbnRlbmQvc3JjL21haW4vamF2YS9vcmcvb3ZpcnQv ZW5naW5lL3VpL2Zyb250ZW5kL3NlcnZlci9nd3QvV2ViYWRtaW5EeW5hbWljSG9zdGluZ1NlcnZs ZXQuamF2YSBiL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvZnJvbnRlbmQvc3JjL21haW4vamF2 YS9vcmcvb3ZpcnQvZW5naW5lL3VpL2Zyb250ZW5kL3NlcnZlci9nd3QvV2ViYWRtaW5EeW5hbWlj SG9zdGluZ1NlcnZsZXQuamF2YQppbmRleCA0MjhkY2M1Li5kY2FmNDlhIDEwMDY0NAotLS0gYS9m cm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL2Zyb250ZW5kL3NyYy9tYWluL2phdmEvb3JnL292aXJ0 L2VuZ2luZS91aS9mcm9udGVuZC9zZXJ2ZXIvZ3d0L1dlYmFkbWluRHluYW1pY0hvc3RpbmdTZXJ2 bGV0LmphdmEKKysrIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy9mcm9udGVuZC9zcmMvbWFp bi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvZnJvbnRlbmQvc2VydmVyL2d3dC9XZWJhZG1pbkR5 bmFtaWNIb3N0aW5nU2VydmxldC5qYXZhCkBAIC0zNiw2ICszNiwxMCBAQCBwdWJsaWMgY2xhc3Mg V2ViYWRtaW5EeW5hbWljSG9zdGluZ1NlcnZsZXQgZXh0ZW5kcyBHd3REeW5hbWljSG9zdFBhZ2VT ZXJ2bGV0IHsKICAgICAgICAgICAgIGFwcE1vZGVEYXRhLnB1dCgidmFsdWUiLCBTdHJpbmcudmFs dWVPZihhcHBsaWNhdGlvbk1vZGUpKTsgLy8kTk9OLU5MUy0xJAogICAgICAgICAgICAgd3JpdGVK c09iamVjdCh3cml0ZXIsICJhcHBsaWNhdGlvbk1vZGUiLCBhcHBNb2RlRGF0YSk7IC8vJE5PTi1O TFMtMSQKICAgICAgICAgfQorCisgICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gcGx1Z2luRGVm aW5pdGlvbnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKyAgICAgICAgcGx1Z2lu RGVmaW5pdGlvbnMucHV0KCJteVBsdWdpbiIsICIvd2ViYWRtaW4vd2ViYWRtaW4vUGx1Z2luU291 cmNlUGFnZT9wbHVnaW49bXlQbHVnaW4iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisg ICAgICAgIHdyaXRlSnNPYmplY3Qod3JpdGVyLCAicGx1Z2luRGVmaW5pdGlvbnMiLCBwbHVnaW5E ZWZpbml0aW9ucyk7IC8vJE5PTi1OTFMtMSQKICAgICB9CiAKICAgICBwcml2YXRlIEludGVnZXIg Z2V0QXBwbGljYXRpb25Nb2RlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KSB7CmRpZmYgLS1n aXQgYS9mcm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3Jn L292aXJ0L2VuZ2luZS91aS93ZWJhZG1pbi9naW4vU3lzdGVtTW9kdWxlLmphdmEgYi9mcm9udGVu ZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2lu ZS91aS93ZWJhZG1pbi9naW4vU3lzdGVtTW9kdWxlLmphdmEKaW5kZXggMzA2OWI5OS4uYjA0OTY4 MyAxMDA2NDQKLS0tIGEvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFp bi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vZ2luL1N5c3RlbU1vZHVsZS5qYXZh CisrKyBiL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9v cmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL2dpbi9TeXN0ZW1Nb2R1bGUuamF2YQpAQCAtOSw2 ICs5LDggQEAgaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkud2ViYWRtaW4uQXBwbGljYXRpb25S ZXNvdXJjZXM7CiBpbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS51aS53ZWJhZG1pbi5BcHBsaWNhdGlv blRlbXBsYXRlczsKIGltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLndlYmFkbWluLnBsYWNlLkFw cGxpY2F0aW9uUGxhY2VzOwogaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkud2ViYWRtaW4ucGxh Y2UuV2ViQWRtaW5QbGFjZU1hbmFnZXI7CitpbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS51aS53ZWJh ZG1pbi5wbHVnaW4uUGx1Z2luRXZlbnRIYW5kbGVyOworaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUu dWkud2ViYWRtaW4ucGx1Z2luLlBsdWdpbk1hbmFnZXI7CiBpbXBvcnQgb3JnLm92aXJ0LmVuZ2lu ZS51aS53ZWJhZG1pbi5zeXN0ZW0uQXBwbGljYXRpb25Jbml0OwogaW1wb3J0IG9yZy5vdmlydC5l bmdpbmUudWkud2ViYWRtaW4uc3lzdGVtLkludGVybmFsQ29uZmlndXJhdGlvbjsKIApAQCAtMzEs NiArMzMsOCBAQCBwdWJsaWMgY2xhc3MgU3lzdGVtTW9kdWxlIGV4dGVuZHMgQmFzZVN5c3RlbU1v ZHVsZSB7CiAgICAgICAgIGJpbmQoUGxhY2VNYW5hZ2VyLmNsYXNzKS50byhXZWJBZG1pblBsYWNl TWFuYWdlci5jbGFzcykuaW4oU2luZ2xldG9uLmNsYXNzKTsKICAgICAgICAgYmluZChBcHBsaWNh dGlvbkluaXQuY2xhc3MpLmFzRWFnZXJTaW5nbGV0b24oKTsKICAgICAgICAgYmluZChJbnRlcm5h bENvbmZpZ3VyYXRpb24uY2xhc3MpLmFzRWFnZXJTaW5nbGV0b24oKTsKKyAgICAgICAgYmluZChQ bHVnaW5NYW5hZ2VyLmNsYXNzKS5hc0VhZ2VyU2luZ2xldG9uKCk7CisgICAgICAgIGJpbmQoUGx1 Z2luRXZlbnRIYW5kbGVyLmNsYXNzKS5hc0VhZ2VyU2luZ2xldG9uKCk7CiAgICAgfQogCiAgICAg dm9pZCBiaW5kQ29uZmlndXJhdGlvbigpIHsKZGlmZiAtLWdpdCBhL2Zyb250ZW5kL3dlYmFkbWlu L21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFk bWluL3BsdWdpbi9QbHVnaW5EZWZpbml0aW9ucy5qYXZhIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9k dWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4v cGx1Z2luL1BsdWdpbkRlZmluaXRpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uZDExMThjYgotLS0gL2Rldi9udWxsCisrKyBiL2Zyb250ZW5kL3dlYmFkbWluL21v ZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWlu L3BsdWdpbi9QbHVnaW5EZWZpbml0aW9ucy5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKK3BhY2thZ2Ug b3JnLm92aXJ0LmVuZ2luZS51aS53ZWJhZG1pbi5wbHVnaW47CisKK2ltcG9ydCBjb20uZ29vZ2xl Lmd3dC5jb3JlLmNsaWVudC5KYXZhU2NyaXB0T2JqZWN0OworaW1wb3J0IGNvbS5nb29nbGUuZ3d0 LmNvcmUuY2xpZW50LkpzQXJyYXlTdHJpbmc7CisKKy8qKgorICogT3ZlcmxheSB0eXBlIGZvciB7 QGNvZGUgcGx1Z2luRGVmaW5pdGlvbnN9IGdsb2JhbCBKUyBvYmplY3QuCisgKi8KK3B1YmxpYyBm aW5hbCBjbGFzcyBQbHVnaW5EZWZpbml0aW9ucyBleHRlbmRzIEphdmFTY3JpcHRPYmplY3Qgewor CisgICAgcHJvdGVjdGVkIFBsdWdpbkRlZmluaXRpb25zKCkgeworICAgIH0KKworICAgIHB1Ymxp YyBzdGF0aWMgbmF0aXZlIFBsdWdpbkRlZmluaXRpb25zIGluc3RhbmNlKCkgLyoteworICAgICAg ICByZXR1cm4gJHduZC5wbHVnaW5EZWZpbml0aW9uczsKKyAgICB9LSovOworCisgICAgcHVibGlj IG5hdGl2ZSBKc0FycmF5U3RyaW5nIGdldFBsdWdpbk5hbWVzKCkgLyoteworICAgICAgICB2YXIg cGx1Z2luTmFtZXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMpIHsKKyAgICAg ICAgICAgIHBsdWdpbk5hbWVzLnB1c2goa2V5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g cGx1Z2luTmFtZXM7CisgICAgfS0qLzsKKworICAgIHB1YmxpYyBuYXRpdmUgU3RyaW5nIGdldFBs dWdpblNvdXJjZVBhZ2VVcmwoU3RyaW5nIHBsdWdpbk5hbWUpIC8qLXsKKyAgICAgICAgcmV0dXJu IHRoaXNbcGx1Z2luTmFtZV07CisgICAgfS0qLzsKKworfQpkaWZmIC0tZ2l0IGEvZnJvbnRlbmQv d2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUv dWkvd2ViYWRtaW4vcGx1Z2luL1BsdWdpbkV2ZW50SGFuZGxlci5qYXZhIGIvZnJvbnRlbmQvd2Vi YWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkv d2ViYWRtaW4vcGx1Z2luL1BsdWdpbkV2ZW50SGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmNiYWZiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9mcm9udGVuZC93 ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91 aS93ZWJhZG1pbi9wbHVnaW4vUGx1Z2luRXZlbnRIYW5kbGVyLmphdmEKQEAgLTAsMCArMSwyMyBA QAorcGFja2FnZSBvcmcub3ZpcnQuZW5naW5lLnVpLndlYmFkbWluLnBsdWdpbjsKKworaW1wb3J0 IGNvbS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5FdmVudEJ1czsKK2ltcG9ydCBjb20uZ29vZ2xl LmluamVjdC5JbmplY3Q7CisKKy8qKgorICogSGFuZGxlcyBXZWJBZG1pbiBhcHBsaWNhdGlvbiBl dmVudHMgKGV4dGVuc2lvbiBwb2ludHMpIHRvIGJlIGNvbnN1bWVkIGJ5IFVJIHBsdWdpbnMuCisg KiA8cD4KKyAqIFNob3VsZCBiZSBib3VuZCBhcyBHSU4gZWFnZXIgc2luZ2xldG9uLCBjcmVhdGVk IGVhcmx5IG9uIGR1cmluZyBhcHBsaWNhdGlvbiBzdGFydHVwLgorICovCitwdWJsaWMgY2xhc3Mg UGx1Z2luRXZlbnRIYW5kbGVyIHsKKworICAgIEBJbmplY3QKKyAgICBwdWJsaWMgUGx1Z2luRXZl bnRIYW5kbGVyKEV2ZW50QnVzIGV2ZW50QnVzLCBQbHVnaW5NYW5hZ2VyIG1hbmFnZXIpIHsKKy8v ICAgICAgICBldmVudEJ1cy5hZGRIYW5kbGVyKEV4dFVzZXJMb2dpbkV2ZW50LmdldFR5cGUoKSwg bmV3IEV4dFVzZXJMb2dpbkhhbmRsZXIoKSB7CisvLyAgICAgICAgICAgIEBPdmVycmlkZQorLy8g ICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkV4dFVzZXJMb2dpbihFeHRVc2VyTG9naW5FdmVudCBl dmVudCkgeworLy8gICAgICAgICAgICAgICAgaW52b2tlUGx1Z2lucygiVXNlckxvZ2luIik7Cisv LyAgICAgICAgICAgIH0KKy8vICAgICAgICB9KTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2Zy b250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQv ZW5naW5lL3VpL3dlYmFkbWluL3BsdWdpbi9QbHVnaW5NYW5hZ2VyLmphdmEgYi9mcm9udGVuZC93 ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91 aS93ZWJhZG1pbi9wbHVnaW4vUGx1Z2luTWFuYWdlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjU2NjNhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9mcm9udGVuZC93ZWJh ZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0L2VuZ2luZS91aS93 ZWJhZG1pbi9wbHVnaW4vUGx1Z2luTWFuYWdlci5qYXZhCkBAIC0wLDAgKzEsMTk5IEBACitwYWNr YWdlIG9yZy5vdmlydC5lbmdpbmUudWkud2ViYWRtaW4ucGx1Z2luOworCitpbXBvcnQgamF2YS51 dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGls Lk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxv Z2dlcjsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmNvcmUuY2xpZW50LkphdmFTY3JpcHRPYmpl Y3Q7CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuY29yZS5jbGllbnQuSnNBcnJheVN0cmluZzsKK2lt cG9ydCBjb20uZ29vZ2xlLmd3dC5kb20uY2xpZW50LkRvY3VtZW50OworaW1wb3J0IGNvbS5nb29n bGUuZ3d0LmRvbS5jbGllbnQuSUZyYW1lRWxlbWVudDsKK2ltcG9ydCBjb20uZ29vZ2xlLmd3dC5k b20uY2xpZW50LlN0eWxlLkJvcmRlclN0eWxlOworaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmRvbS5j bGllbnQuU3R5bGUuUG9zaXRpb247CitpbXBvcnQgY29tLmdvb2dsZS5nd3QuZG9tLmNsaWVudC5T dHlsZS5Vbml0OworCisvKioKKyAqIFRoZSBtYWluIGNvbXBvbmVudCBvZiBXZWJBZG1pbiBVSSBw bHVnaW4gaW5mcmFzdHJ1Y3R1cmUuCisgKiA8cD4KKyAqIFNob3VsZCBiZSBib3VuZCBhcyBHSU4g ZWFnZXIgc2luZ2xldG9uLCBjcmVhdGVkIGVhcmx5IG9uIGR1cmluZyBhcHBsaWNhdGlvbiBzdGFy dHVwLgorICovCitwdWJsaWMgY2xhc3MgUGx1Z2luTWFuYWdlciB7CisKKyAgICBwcml2YXRlIHN0 YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihQbHVnaW5NYW5hZ2Vy LmNsYXNzLmdldE5hbWUoKSk7CisKKyAgICAvLyBNYXBzIHBsdWdpbiBuYW1lcyB0byBjb3JyZXNw b25kaW5nIGlmcmFtZSBlbGVtZW50cworICAgIHByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgSUZy YW1lRWxlbWVudD4gcGx1Z2luSUZyYW1lcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgSUZyYW1lRWxl bWVudD4oKTsKKworICAgIC8vIE1hcHMgcGx1Z2luIG5hbWVzIHRvIGNvcnJlc3BvbmRpbmcgcGx1 Z2luIG9iamVjdHMgKG9ubHkgZm9yIHBsdWdpbnMgd2hpY2ggYXJlIGN1cnJlbnRseSByZWFkeSkK KyAgICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIEphdmFTY3JpcHRPYmplY3Q+IHBsdWdpbk9i amVjdHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEphdmFTY3JpcHRPYmplY3Q+KCk7CisKKyAgICAv LyBDb250YWlucyBwbHVnaW4gbmFtZXMgZm9yIHBsdWdpbnMgdGhhdCBoYXZlIGJlZW4gaW5pdGlh bGl6ZWQKKyAgICAvLyAoVWlJbml0IGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gd2FzIGFscmVhZHkg Y2FsbGVkIG9uIGNvcnJlc3BvbmRpbmcgcGx1Z2luIG9iamVjdHMpCisgICAgcHJpdmF0ZSBmaW5h bCBTZXQ8U3RyaW5nPiBpbml0aWFsaXplZFBsdWdpbnMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7 CisKKyAgICAvLyBDb250cm9scyBwbHVnaW4gaW52b2NhdGlvbiwgYWxsb3dpbmcgV2ViQWRtaW4g dG8gY2FsbCBwbHVnaW5zIG9ubHkgd2l0aGluIGEgc3BlY2lmaWMgYXBwbGljYXRpb24gY29udGV4 dAorICAgIHByaXZhdGUgYm9vbGVhbiBjYW5JbnZva2VQbHVnaW5zID0gZmFsc2U7CisKKyAgICBw dWJsaWMgUGx1Z2luTWFuYWdlcigpIHsKKyAgICAgICAgZXhwb3NlUGx1Z2luQXBpKCk7CisgICAg ICAgIGxvYWRQbHVnaW5zKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2FsbGVkIHdoZW4g V2ViQWRtaW4gZW50ZXJzIHRoZSBzdGF0ZSB0aGF0IGFsbG93cyBwbHVnaW5zIHRvIGJlIGludm9r ZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgZW5hYmxlUGx1Z2luSW52b2NhdGlvbigpIHsK KyAgICAgICAgY2FuSW52b2tlUGx1Z2lucyA9IHRydWU7CisKKyAgICAgICAgLy8gVHJ5IHRvIGlu aXRpYWxpemUgYWxsIHBsdWdpbnMgd2hpY2ggYXJlIGN1cnJlbnRseSByZWFkeQorICAgICAgICBm b3IgKFN0cmluZyBwbHVnaW5OYW1lIDogcGx1Z2luT2JqZWN0cy5rZXlTZXQoKSkgeworICAgICAg ICAgICAgaW5pdFBsdWdpbihwbHVnaW5OYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8q KgorICAgICAqIENhbGxlZCB3aGVuIFdlYkFkbWluIGxlYXZlcyB0aGUgc3RhdGUgdGhhdCBhbGxv d3MgcGx1Z2lucyB0byBiZSBpbnZva2VkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGRpc2Fi bGVQbHVnaW5JbnZvY2F0aW9uKCkgeworICAgICAgICBjYW5JbnZva2VQbHVnaW5zID0gZmFsc2U7 CisgICAgfQorCisgICAgYm9vbGVhbiBpc1BsdWdpblJlYWR5KFN0cmluZyBwbHVnaW5OYW1lKSB7 CisgICAgICAgIHJldHVybiBwbHVnaW5PYmplY3RzLmNvbnRhaW5zS2V5KHBsdWdpbk5hbWUpOwor ICAgIH0KKworICAgIGJvb2xlYW4gaXNQbHVnaW5Jbml0aWFsaXplZChTdHJpbmcgcGx1Z2luTmFt ZSkgeworICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZWRQbHVnaW5zLmNvbnRhaW5zKHBsdWdpbk5h bWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEluaXRpYWxpemUgdGhlIGdpdmVuIHBsdWdp biBieSBjYWxsaW5nIFVpSW5pdCBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIG9uIHRoZSBjb3JyZXNw b25kaW5nIHBsdWdpbiBvYmplY3QuCisgICAgICogPHA+CisgICAgICogTm90ZSB0aGF0IFVpSW5p dCBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGp1c3Qgb25jZSBkdXJpbmcg dGhlIGxpZmV0aW1lIG9mIGEgcGx1Z2luLgorICAgICAqLworICAgIHZvaWQgaW5pdFBsdWdpbihT dHJpbmcgcGx1Z2luTmFtZSkgeworICAgICAgICBpZiAoY2FuSW52b2tlUGx1Z2lucyAmJiBpc1Bs dWdpblJlYWR5KHBsdWdpbk5hbWUpICYmICFpc1BsdWdpbkluaXRpYWxpemVkKHBsdWdpbk5hbWUp KSB7CisgICAgICAgICAgICBKYXZhU2NyaXB0T2JqZWN0IHBsdWdpbk9iamVjdCA9IHBsdWdpbk9i amVjdHMuZ2V0KHBsdWdpbk5hbWUpOworICAgICAgICAgICAgaW52b2tlUGx1Z2luKHBsdWdpbk9i amVjdCwgIlVpSW5pdCIsIG51bGwpOyAvLyROT04tTkxTLTEkCisKKyAgICAgICAgICAgIGluaXRp YWxpemVkUGx1Z2lucy5hZGQocGx1Z2luTmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv KioKKyAgICAgKiBJbnZva2VzIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gb24gYWxsIHBsdWdp bnMgd2hpY2ggYXJlIGN1cnJlbnRseSByZWFkeS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBp bnZva2VQbHVnaW5zKFN0cmluZyBmdW5jdGlvbk5hbWUsIEphdmFTY3JpcHRPYmplY3QgY29udGV4 dE9iamVjdCkgeworICAgICAgICBpZiAoY2FuSW52b2tlUGx1Z2lucykgeworICAgICAgICAgICAg Zm9yIChTdHJpbmcgcGx1Z2luTmFtZSA6IHBsdWdpbk9iamVjdHMua2V5U2V0KCkpIHsKKyAgICAg ICAgICAgICAgICBpZiAoaXNQbHVnaW5Jbml0aWFsaXplZChwbHVnaW5OYW1lKSkgeworICAgICAg ICAgICAgICAgICAgICBpbnZva2VQbHVnaW4ocGx1Z2luT2JqZWN0cy5nZXQocGx1Z2luTmFtZSks IGZ1bmN0aW9uTmFtZSwgY29udGV4dE9iamVjdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogSW52b2tlcyBhbiBl dmVudCBoYW5kbGVyIGZ1bmN0aW9uIG9uIHRoZSBnaXZlbiBwbHVnaW4gb2JqZWN0LgorICAgICAq LworICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgaW52b2tlUGx1Z2luKEphdmFTY3JpcHRPYmplY3Qg cGx1Z2luT2JqZWN0LCBTdHJpbmcgZnVuY3Rpb25OYW1lLCBKYXZhU2NyaXB0T2JqZWN0IGNvbnRl eHRPYmplY3QpIC8qLXsKKyAgICAgICAgdmFyIGhhbmRsZXJGdW5jdGlvbiA9IHBsdWdpbk9iamVj dFtmdW5jdGlvbk5hbWVdOworCisgICAgICAgIGlmICh0eXBlb2YgaGFuZGxlckZ1bmN0aW9uID09 PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICBpZiAoY29udGV4dE9iamVjdCAhPSBudWxsKSB7 CisgICAgICAgICAgICAgICAgaGFuZGxlckZ1bmN0aW9uKGNvbnRleHRPYmplY3QpOworICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVyRnVuY3Rpb24oKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0tKi87CisKKyAgICAvKioKKyAgICAgKiBMb2FkcyBh bGwgcGx1Z2lucyB0aGF0IHdlcmUgZGV0ZWN0ZWQgd2hlbiBzZXJ2aW5nIFdlYkFkbWluIGhvc3Qg cGFnZS4KKyAgICAgKi8KKyAgICB2b2lkIGxvYWRQbHVnaW5zKCkgeworICAgICAgICBQbHVnaW5E ZWZpbml0aW9ucyBkZWZzID0gUGx1Z2luRGVmaW5pdGlvbnMuaW5zdGFuY2UoKTsKKworICAgICAg ICBpZiAoZGVmcyAhPSBudWxsKSB7CisgICAgICAgICAgICBKc0FycmF5U3RyaW5nIHBsdWdpbk5h bWVzID0gZGVmcy5nZXRQbHVnaW5OYW1lcygpOworCisgICAgICAgICAgICBmb3IgKGludCBpID0g MDsgaSA8IHBsdWdpbk5hbWVzLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBTdHJp bmcgbmFtZSA9IHBsdWdpbk5hbWVzLmdldChpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc291 cmNlUGFnZVVybCA9IGRlZnMuZ2V0UGx1Z2luU291cmNlUGFnZVVybChuYW1lKTsKKworICAgICAg ICAgICAgICAgIGxvZ2dlci5pbmZvKCJMb2FkaW5nIHBsdWdpbiBbIiArIG5hbWUgKyAiXSBmcm9t IFVSTCAiICsgc291cmNlUGFnZVVybCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorICAg ICAgICAgICAgICAgIGxvYWRQbHVnaW4obmFtZSwgc291cmNlUGFnZVVybCk7CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBMb2FkcyBhIHBsdWdpbiB1 c2luZyBpdHMgc291cmNlIHBhZ2UgKEhUTUwgcGFnZSB0aGF0IGV4ZWN1dGVzIHRoZSBhY3R1YWwg cGx1Z2luIGNvZGUpLgorICAgICAqIDxwPgorICAgICAqIFdlYkFkbWluIHJlcXVpcmVzIGFsbCBw bHVnaW5zIHRvIGhhdmUgYSBzb3VyY2UgcGFnZSBiZWNhdXNlIGVhY2ggcGx1Z2luIHJ1bnMgd2l0 aGluIHRoZSBjb250ZXh0IG9mIGFuIGlmcmFtZS4KKyAgICAgKi8KKyAgICB2b2lkIGxvYWRQbHVn aW4oU3RyaW5nIHBsdWdpbk5hbWUsIFN0cmluZyBwbHVnaW5Tb3VyY2VQYWdlVXJsKSB7CisgICAg ICAgIGlmIChwbHVnaW5JRnJhbWVzLmNvbnRhaW5zS2V5KHBsdWdpbk5hbWUpKSB7CisgICAgICAg ICAgICBsb2dnZXIud2FybmluZygiUGx1Z2luIFsiICsgcGx1Z2luTmFtZSArICJdIGlzIGFscmVh ZHkgbG9hZGVkIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorICAgICAgICAgICAgcmV0 dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ3JlYXRlIGFuIGlmcmFtZSB1c2VkIHRvIGxv YWQgdGhlIHBsdWdpbiBzb3VyY2UgcGFnZQorICAgICAgICBJRnJhbWVFbGVtZW50IGlmcmFtZSA9 IERvY3VtZW50LmdldCgpLmNyZWF0ZUlGcmFtZUVsZW1lbnQoKTsKKyAgICAgICAgaWZyYW1lLnNl dFNyYyhwbHVnaW5Tb3VyY2VQYWdlVXJsKTsKKyAgICAgICAgaWZyYW1lLnNldEZyYW1lQm9yZGVy KDApOworICAgICAgICBpZnJhbWUuZ2V0U3R5bGUoKS5zZXRQb3NpdGlvbihQb3NpdGlvbi5BQlNP TFVURSk7CisgICAgICAgIGlmcmFtZS5nZXRTdHlsZSgpLnNldFdpZHRoKDAsIFVuaXQuUFQpOwor ICAgICAgICBpZnJhbWUuZ2V0U3R5bGUoKS5zZXRIZWlnaHQoMCwgVW5pdC5QVCk7CisgICAgICAg IGlmcmFtZS5nZXRTdHlsZSgpLnNldEJvcmRlclN0eWxlKEJvcmRlclN0eWxlLk5PTkUpOworICAg ICAgICBwbHVnaW5JRnJhbWVzLnB1dChwbHVnaW5OYW1lLCBpZnJhbWUpOworCisgICAgICAgIC8v IEF0dGFjaCB0aGUgaWZyYW1lIHRvIERPTSBkb2N1bWVudCBib2R5CisgICAgICAgIERvY3VtZW50 LmdldCgpLmdldEJvZHkoKS5hcHBlbmRDaGlsZChpZnJhbWUpOworICAgIH0KKworICAgIC8qKgor ICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBnaXZlbiBwbHVnaW4gaXMgcmVhZHkgZm9yIHVzZS4K KyAgICAgKi8KKyAgICB2b2lkIHBsdWdpblJlYWR5KFN0cmluZyBwbHVnaW5OYW1lLCBKYXZhU2Ny aXB0T2JqZWN0IHBsdWdpbk9iamVjdCkgeworICAgICAgICBpZiAocGx1Z2luTmFtZSA9PSBudWxs KSB7CisgICAgICAgICAgICBsb2dnZXIud2FybmluZygiUGx1Z2luIG5hbWUgaXMgbnVsbCBvciB1 bmRlZmluZWQiKTsgLy8kTk9OLU5MUy0xJAorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9 CisKKyAgICAgICAgaWYgKCFwbHVnaW5JRnJhbWVzLmNvbnRhaW5zS2V5KHBsdWdpbk5hbWUpKSB7 CisgICAgICAgICAgICBsb2dnZXIud2FybmluZygiUGx1Z2luIFsiICsgcGx1Z2luTmFtZSArICJd IHJlcG9ydHMgaW4gYXMgcmVhZHksIGJ1dCBoYXMgbm8gaWZyYW1lIGFzc29jaWF0ZWQiKTsgLy8k Tk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K KworICAgICAgICAvLyBSZWdpc3RlciB0aGUgcGx1Z2luIG9iamVjdAorICAgICAgICBwbHVnaW5P YmplY3RzLnB1dChwbHVnaW5OYW1lLCBwbHVnaW5PYmplY3QpOworICAgICAgICBsb2dnZXIuaW5m bygiUGx1Z2luIFsiICsgcGx1Z2luTmFtZSArICJdIGlzIHJlYWR5IGZvciB1c2UiKTsgLy8kTk9O LU5MUy0xJCAvLyROT04tTkxTLTIkCisKKyAgICAgICAgLy8gVHJ5IHRvIGluaXRpYWxpemUgdGhl IHBsdWdpbgorICAgICAgICBpbml0UGx1Z2luKHBsdWdpbk5hbWUpOworICAgIH0KKworICAgIHBy aXZhdGUgbmF0aXZlIHZvaWQgZXhwb3NlUGx1Z2luQXBpKCkgLyoteworICAgICAgICB2YXIgaW5z dGFuY2UgPSB0aGlzOworCisgICAgICAgIC8vIEV4cG9zZSB0aGUgZ2xvYmFsIHBsdWdpbkFwaSBv YmplY3QKKyAgICAgICAgJHduZC5wbHVnaW5BcGkgPSB7CisKKyAgICAgICAgICAgIC8vIFBsdWdp bnMgd2lsbCByZWdpc3RlciB0aGVtc2VsdmVzIGludG8gdGhpcyBvYmplY3QgYnkgYWRkaW5nIG5l dyBwcm9wZXJ0eToKKyAgICAgICAgICAgIC8vIC0gcHJvcGVydHkgbmFtZSBpcyB0aGUgbmFtZSBv ZiB0aGUgcGx1Z2luCisgICAgICAgICAgICAvLyAtIHByb3BlcnR5IHZhbHVlIGlzIHRoZSBwbHVn aW4gb2JqZWN0IGNvbnRhaW5pbmcgZXZlbnQgaGFuZGxlciBmdW5jdGlvbnMKKyAgICAgICAgICAg IHBsdWdpbnM6IHt9LAorCisgICAgICAgICAgICAvLyBQbHVnaW5zIHdpbGwgY2FsbCB0aGlzIGZ1 bmN0aW9uIHRvIGluZGljYXRlIHRoYXQgdGhleSBhcmUgcmVhZHkgZm9yIHVzZQorICAgICAgICAg ICAgcmVhZHk6IGZ1bmN0aW9uKHBsdWdpbk5hbWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGx1 Z2luT2JqZWN0ID0gdGhpcy5wbHVnaW5zW3BsdWdpbk5hbWVdOworICAgICAgICAgICAgICAgIGlu c3RhbmNlLkBvcmcub3ZpcnQuZW5naW5lLnVpLndlYmFkbWluLnBsdWdpbi5QbHVnaW5NYW5hZ2Vy OjpwbHVnaW5SZWFkeShMamF2YS9sYW5nL1N0cmluZztMY29tL2dvb2dsZS9nd3QvY29yZS9jbGll bnQvSmF2YVNjcmlwdE9iamVjdDspKHBsdWdpbk5hbWUscGx1Z2luT2JqZWN0KTsKKyAgICAgICAg ICAgIH0KKworICAgICAgICB9OworICAgIH0tKi87CisKK30KZGlmZiAtLWdpdCBhL2Zyb250ZW5k L3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9vcmcvb3ZpcnQvZW5naW5l L3VpL3dlYmFkbWluL3NlY3Rpb24vbWFpbi9wcmVzZW50ZXIvTWFpblNlY3Rpb25QcmVzZW50ZXIu amF2YSBiL2Zyb250ZW5kL3dlYmFkbWluL21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vamF2YS9v cmcvb3ZpcnQvZW5naW5lL3VpL3dlYmFkbWluL3NlY3Rpb24vbWFpbi9wcmVzZW50ZXIvTWFpblNl Y3Rpb25QcmVzZW50ZXIuamF2YQppbmRleCA3MThkOGZjLi4xNWI4ODdjIDEwMDY0NAotLS0gYS9m cm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL2phdmEvb3JnL292aXJ0 L2VuZ2luZS91aS93ZWJhZG1pbi9zZWN0aW9uL21haW4vcHJlc2VudGVyL01haW5TZWN0aW9uUHJl c2VudGVyLmphdmEKKysrIGIvZnJvbnRlbmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMv bWFpbi9qYXZhL29yZy9vdmlydC9lbmdpbmUvdWkvd2ViYWRtaW4vc2VjdGlvbi9tYWluL3ByZXNl bnRlci9NYWluU2VjdGlvblByZXNlbnRlci5qYXZhCkBAIC0xLDUgKzEsNyBAQAogcGFja2FnZSBv cmcub3ZpcnQuZW5naW5lLnVpLndlYmFkbWluLnNlY3Rpb24ubWFpbi5wcmVzZW50ZXI7CiAKK2lt cG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLndlYmFkbWluLnBsdWdpbi5QbHVnaW5NYW5hZ2VyOwor CiBpbXBvcnQgY29tLmdvb2dsZS5nd3QuZXZlbnQuc2hhcmVkLkV2ZW50QnVzOwogaW1wb3J0IGNv bS5nb29nbGUuZ3d0LmV2ZW50LnNoYXJlZC5Hd3RFdmVudC5UeXBlOwogaW1wb3J0IGNvbS5nb29n bGUuaW5qZWN0LkluamVjdDsKQEAgLTI4LDExICszMCwxMyBAQCBwdWJsaWMgY2xhc3MgTWFpblNl Y3Rpb25QcmVzZW50ZXIgZXh0ZW5kcyBQcmVzZW50ZXI8TWFpblNlY3Rpb25QcmVzZW50ZXIuVmll d0RlZgogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVHlwZTxSZXZlYWxDb250ZW50SGFuZGxlcjw/ Pj4gVFlQRV9TZXRNYWluQ29udGVudCA9IG5ldyBUeXBlPFJldmVhbENvbnRlbnRIYW5kbGVyPD8+ PigpOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBIZWFkZXJQcmVzZW50ZXJXaWRnZXQgaGVhZGVyOwor ICAgIHByaXZhdGUgZmluYWwgUGx1Z2luTWFuYWdlciBwbHVnaW5NYW5hZ2VyOwogCiAgICAgQElu amVjdAotICAgIHB1YmxpYyBNYWluU2VjdGlvblByZXNlbnRlcihFdmVudEJ1cyBldmVudEJ1cywg Vmlld0RlZiB2aWV3LCBQcm94eURlZiBwcm94eSwgSGVhZGVyUHJlc2VudGVyV2lkZ2V0IGhlYWRl cikgeworICAgIHB1YmxpYyBNYWluU2VjdGlvblByZXNlbnRlcihFdmVudEJ1cyBldmVudEJ1cywg Vmlld0RlZiB2aWV3LCBQcm94eURlZiBwcm94eSwgSGVhZGVyUHJlc2VudGVyV2lkZ2V0IGhlYWRl ciwgUGx1Z2luTWFuYWdlciBwbHVnaW5NYW5hZ2VyKSB7CiAgICAgICAgIHN1cGVyKGV2ZW50QnVz LCB2aWV3LCBwcm94eSk7CiAgICAgICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyOworICAgICAgICB0 aGlzLnBsdWdpbk1hbmFnZXIgPSBwbHVnaW5NYW5hZ2VyOwogICAgICAgICBnZXRWaWV3KCkuc2V0 VWlIYW5kbGVycyhoZWFkZXIpOwogICAgIH0KIApAQCAtNDYsNiArNTAsMTcgQEAgcHVibGljIGNs YXNzIE1haW5TZWN0aW9uUHJlc2VudGVyIGV4dGVuZHMgUHJlc2VudGVyPE1haW5TZWN0aW9uUHJl c2VudGVyLlZpZXdEZWYKICAgICAgICAgc3VwZXIub25SZXZlYWwoKTsKIAogICAgICAgICBzZXRJ blNsb3QoVFlQRV9TZXRIZWFkZXIsIGhlYWRlcik7CisKKyAgICAgICAgLy8gRW5hYmxlIHBsdWdp biBpbnZvY2F0aW9uIHdpdGhpbiB0aGUgc2NvcGUgb2YgbWFpbiBzZWN0aW9uCisgICAgICAgIHBs dWdpbk1hbmFnZXIuZW5hYmxlUGx1Z2luSW52b2NhdGlvbigpOworICAgIH0KKworICAgIEBPdmVy cmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uSGlkZSgpIHsKKyAgICAgICAgc3VwZXIub25IaWRl KCk7CisKKyAgICAgICAgLy8gRGlzYWJsZSBwbHVnaW4gaW52b2NhdGlvbiBvdXRzaWRlIHRoZSBz Y29wZSBvZiBtYWluIHNlY3Rpb24KKyAgICAgICAgcGx1Z2luTWFuYWdlci5kaXNhYmxlUGx1Z2lu SW52b2NhdGlvbigpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvZnJvbnRlbmQvd2ViYWRtaW4v bW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvZnJvbnRl bmQvd2ViYWRtaW4vbW9kdWxlcy93ZWJhZG1pbi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIu eG1sCmluZGV4IGE1MGY4YWEuLjYyZjAzMTIgMTAwNjQ0Ci0tLSBhL2Zyb250ZW5kL3dlYmFkbWlu L21vZHVsZXMvd2ViYWRtaW4vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgYi9m cm9udGVuZC93ZWJhZG1pbi9tb2R1bGVzL3dlYmFkbWluL3NyYy9tYWluL3dlYmFwcC9XRUItSU5G L3dlYi54bWwKQEAgLTIzLDYgKzIzLDE2IEBACiAJCTx1cmwtcGF0dGVybj4vd2ViYWRtaW4vV2Vi QWRtaW4uaHRtbDwvdXJsLXBhdHRlcm4+CiAJPC9zZXJ2bGV0LW1hcHBpbmc+CiAKKwk8c2Vydmxl dD4KKwkJPHNlcnZsZXQtbmFtZT5QbHVnaW5Tb3VyY2VQYWdlPC9zZXJ2bGV0LW5hbWU+CisJCTxz ZXJ2bGV0LWNsYXNzPm9yZy5vdmlydC5lbmdpbmUudWkuZnJvbnRlbmQuc2VydmVyLmd3dC5QbHVn aW5Tb3VyY2VQYWdlU2VydmxldDwvc2VydmxldC1jbGFzcz4KKwk8L3NlcnZsZXQ+CisKKwk8c2Vy dmxldC1tYXBwaW5nPgorCQk8c2VydmxldC1uYW1lPlBsdWdpblNvdXJjZVBhZ2U8L3NlcnZsZXQt bmFtZT4KKwkJPHVybC1wYXR0ZXJuPi93ZWJhZG1pbi9QbHVnaW5Tb3VyY2VQYWdlPC91cmwtcGF0 dGVybj4KKwk8L3NlcnZsZXQtbWFwcGluZz4KKwogCTwhLS0gRGVmYXVsdCBwYWdlIHRvIHNlcnZl IC0tPgogCTx3ZWxjb21lLWZpbGUtbGlzdD4KIAkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93 ZWxjb21lLWZpbGU+Ci0tIAoxLjcuNC40Cgo= ------=_Part_7830015_289327145.1344531366470--
participants (1)
-
Vojtech Szocs