svn commit: r19907 - trunk: . src/argouml-app src/argouml-app/META-INF src/argouml-app/src/org/argouml/application src/argouml-app/src/org/argouml/application/api src/argouml-app/src/org/argouml/application/events src/argouml-app/src/org/argouml/application/helpers src/argouml-app/src/org/argouml/cognitive src/argouml-app/src/org/argouml/cognitive/checklist src/argouml-app/src/org/argouml/cognitive/checklist/ui src/argouml-app/src/org/argouml/cognitive/critics src/argouml-app/src/org/argouml/cognitive/critics/ui src/argouml-app/src/org/argouml/cognitive/ui src/argouml-app/src/org/argouml/configuration src/argouml-app/src/org/argouml/gefext src/argouml-app/src/org/argouml/i18n src/argouml-app/src/org/argouml/kernel src/argouml-app/src/org/argouml/language/ui src/argouml-app/src/org/argouml/moduleloader src/argouml-app/src/org/argouml/notation src/argouml-app/src/
[email protected] Sun, 30 Dec 2012 05:06:04 -0800 (PST)
| Newsgroups | gmane.comp.lang.uml.argouml.cvs |
|---|---|
| Message-ID | <[email protected]> |
QXV0aG9yOiBjbG9zZXR0b3BfbmlnaHRseWJ1aWxkDQpEYXRlOiAyMDEyLTEyLTMwIDA1OjA2OjAx LTA4MDANCk5ldyBSZXZpc2lvbjogMTk5MDcNCg0KTW9kaWZpZWQ6DQogICB0cnVuay9wb20ueG1s DQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYNCiAgIHRydW5r L3NyYy9hcmdvdW1sLWFwcC9idWlsZC54bWwNCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9wb20u eG1sDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2FwcGxpY2F0aW9u L01haW4uamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9hcHBs aWNhdGlvbi9TdGFydENyaXRpY3MuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9v cmcvYXJnb3VtbC9hcHBsaWNhdGlvbi9hcGkvQWJzdHJhY3RBcmdvSlBhbmVsLmphdmENCiAgIHRy dW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvYXBwbGljYXRpb24vYXBpL0FyZ28u amF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9hcHBsaWNhdGlv bi9ldmVudHMvQXJnb0V2ZW50UHVtcC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3Jj L29yZy9hcmdvdW1sL2FwcGxpY2F0aW9uL2hlbHBlcnMvUmVzb3VyY2VMb2FkZXJXcmFwcGVyLmph dmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL0Fn ZW5jeS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2NvZ25p dGl2ZS9Dcml0aWMuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3Vt bC9jb2duaXRpdmUvRGVzaWduZXIuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9v cmcvYXJnb3VtbC9jb2duaXRpdmUvUmVzb2x2ZWRDcml0aWMuamF2YQ0KICAgdHJ1bmsvc3JjL2Fy Z291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9jb2duaXRpdmUvVG9Eb0l0ZW0uamF2YQ0KICAgdHJ1 bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9jb2duaXRpdmUvVG9Eb0xpc3QuamF2 YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9jb2duaXRpdmUvY2hl Y2tsaXN0L0NoZWNrTWFuYWdlci5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29y Zy9hcmdvdW1sL2NvZ25pdGl2ZS9jaGVja2xpc3QvdWkvVGFiQ2hlY2tsaXN0LmphdmENCiAgIHRy dW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL2NyaXRpY3MvU25v b3plT3JkZXIuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9j b2duaXRpdmUvY3JpdGljcy91aS9Dcml0aWNCcm93c2VyRGlhbG9nLmphdmENCiAgIHRydW5rL3Ny Yy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL2NyaXRpY3MvdWkvVGFibGVN b2RlbENyaXRpY3MuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3Vt bC9jb2duaXRpdmUvdWkvRGlzbWlzc1RvRG9JdGVtRGlhbG9nLmphdmENCiAgIHRydW5rL3NyYy9h cmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL3VpL1RvRG9CeURlY2lzaW9uLmph dmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL3Vp L1RvRG9CeUdvYWwuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3Vt bC9jb2duaXRpdmUvdWkvVG9Eb0J5T2ZmZW5kZXIuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwt YXBwL3NyYy9vcmcvYXJnb3VtbC9jb2duaXRpdmUvdWkvVG9Eb0J5UG9zdGVyLmphdmENCiAgIHRy dW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL3VpL1RvRG9CeVBy aW9yaXR5LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29n bml0aXZlL3VpL1RvRG9CeVR5cGUuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9v cmcvYXJnb3VtbC9jb2duaXRpdmUvdWkvVG9Eb1BhbmUuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291 bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9jb2duaXRpdmUvdWkvVG9Eb1BlcnNwZWN0aXZlLmphdmEN CiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL3VpL1dp ekRlc2NyaXB0aW9uLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291 bWwvY29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uRmFjdG9yeS5qYXZhDQogICB0cnVuay9zcmMv YXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbkhh bmRsZXIuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9jb25m aWd1cmF0aW9uL0NvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzLmphdmENCiAgIHRydW5rL3NyYy9hcmdv dW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvZ2VmZXh0L0RlZmVycmVkQnVmZmVyZWRJbWFnZS5qYXZh DQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2kxOG4vVHJhbnNsYXRv ci5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2tlcm5lbC9E ZWZhdWx0VW5kb01hbmFnZXIuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcv YXJnb3VtbC9rZXJuZWwvTWVtYmVyTGlzdC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAv c3JjL29yZy9hcmdvdW1sL2tlcm5lbC9Qcm9maWxlQ29uZmlndXJhdGlvbi5qYXZhDQogICB0cnVu ay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2tlcm5lbC9Qcm9qZWN0LmphdmENCiAg IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwva2VybmVsL1Byb2plY3RJbXBs LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwva2VybmVsL1By b2plY3RNYW5hZ2VyLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291 bWwvbGFuZ3VhZ2UvdWkvTGFuZ3VhZ2VDb21ib0JveC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3Vt bC1hcHAvc3JjL29yZy9hcmdvdW1sL21vZHVsZWxvYWRlci9Nb2R1bGVMb2FkZXIyLmphdmENCiAg IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvbm90YXRpb24vTm90YXRpb24u amF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9ub3RhdGlvbi9O b3RhdGlvbk5hbWVJbXBsLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2Fy Z291bWwvbm90YXRpb24vTm90YXRpb25Qcm92aWRlci5qYXZhDQogICB0cnVuay9zcmMvYXJnb3Vt bC1hcHAvc3JjL29yZy9hcmdvdW1sL25vdGF0aW9uL05vdGF0aW9uUHJvdmlkZXJGYWN0b3J5Mi5q YXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL25vdGF0aW9uL3By b3ZpZGVycy9qYXZhL09wZXJhdGlvbk5vdGF0aW9uSmF2YS5qYXZhDQogICB0cnVuay9zcmMvYXJn b3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL25vdGF0aW9uL3Byb3ZpZGVycy91bWwvQWJzdHJhY3RN ZXNzYWdlTm90YXRpb25VbWwuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcv YXJnb3VtbC9ub3RhdGlvbi9wcm92aWRlcnMvdW1sL0F0dHJpYnV0ZU5vdGF0aW9uVW1sLmphdmEN CiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvbm90YXRpb24vcHJvdmlk ZXJzL3VtbC9NZXNzYWdlTm90YXRpb25VbWwuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBw L3NyYy9vcmcvYXJnb3VtbC9ub3RhdGlvbi91aS9Ob3RhdGlvbkNvbWJvQm94LmphdmENCiAgIHRy dW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvb2NsL0FyZ29GYWNhZGUuamF2YQ0K ICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9BYnN0 cmFjdEZpbGVQZXJzaXN0ZXIuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcv YXJnb3VtbC9wZXJzaXN0ZW5jZS9BcmdvUGFyc2VyLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1s LWFwcC9zcmMvb3JnL2FyZ291bWwvcGVyc2lzdGVuY2UvRGlhZ3JhbU1lbWJlckZpbGVQZXJzaXN0 ZXIuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0 ZW5jZS9Nb2RlbE1lbWJlckZpbGVQZXJzaXN0ZXIuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwt YXBwL3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9PbGRaYXJnb0ZpbGVQZXJzaXN0ZXIuamF2 YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9Q R01MU3RhY2tQYXJzZXIuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJn b3VtbC9wZXJzaXN0ZW5jZS9Qcml2YXRlSGFuZGxlci5qYXZhDQogICB0cnVuay9zcmMvYXJnb3Vt bC1hcHAvc3JjL29yZy9hcmdvdW1sL3BlcnNpc3RlbmNlL1Byb2ZpbGVDb25maWd1cmF0aW9uRmls ZVBlcnNpc3Rlci5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1s L3BlcnNpc3RlbmNlL1NBWFBhcnNlckJhc2UuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBw L3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9Ub2RvUGFyc2VyLmphdmENCiAgIHRydW5rL3Ny Yy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcGVyc2lzdGVuY2UvVW1sRmlsZVBlcnNpc3Rl ci5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3BlcnNpc3Rl bmNlL1hNTFRva2VuVGFibGVCYXNlLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMv b3JnL2FyZ291bWwvcGVyc2lzdGVuY2UvWG1pRmlsZVBlcnNpc3Rlci5qYXZhDQogICB0cnVuay9z cmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3BlcnNpc3RlbmNlL1htbElucHV0U3RyZWFt LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcGVyc2lzdGVu Y2UvWmFyZ29GaWxlUGVyc2lzdGVyLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMv b3JnL2FyZ291bWwvcGVyc2lzdGVuY2UvWmlwRmlsZVBlcnNpc3Rlci5qYXZhDQogICB0cnVuay9z cmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUvRmlsZU1vZGVsTG9hZGVyLmph dmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcHJvZmlsZS9Qcm9m aWxlRmFjYWRlLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwv cHJvZmlsZS9SZWFkZXJNb2RlbExvYWRlci5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAv c3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUvUmVzb3VyY2VNb2RlbExvYWRlci5qYXZhDQogICB0cnVu ay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUvU3RyZWFtTW9kZWxMb2Fk ZXIuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wcm9maWxl L1VzZXJEZWZpbmVkUHJvZmlsZS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29y Zy9hcmdvdW1sL3Byb2ZpbGUvWmlwTW9kZWxMb2FkZXIuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291 bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wcm9maWxlL2luaXQvUHJvZmlsZUxvYWRlci5qYXZhDQog ICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUvaW50ZXJuYWwv RGVwZW5kZW5jeVJlc29sdmVyLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3Jn L2FyZ291bWwvcHJvZmlsZS9pbnRlcm5hbC9Qcm9maWxlTWFuYWdlckltcGwuamF2YQ0KICAgdHJ1 bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wcm9maWxlL2ludGVybmFsL1Byb2Zp bGVNZXRhLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcHJv ZmlsZS9pbnRlcm5hbC9Qcm9maWxlVU1MLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9z cmMvb3JnL2FyZ291bWwvcHJvZmlsZS9pbnRlcm5hbC9vY2wvQ29tcHV0ZURlc2lnbk1hdGVyaWFs cy5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUv aW50ZXJuYWwvb2NsL0RlZmF1bHRPY2xFdmFsdWF0b3IuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291 bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wcm9maWxlL2ludGVybmFsL29jbC9FdmFsdWF0ZUV4cHJl c3Npb24uamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wcm9m aWxlL2ludGVybmFsL29jbC91bWwxNC9Nb2RlbEFjY2Vzc01vZGVsSW50ZXJwcmV0ZXIuamF2YQ0K ICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9BY3Rpb25DcmVhdGVF ZGdlTW9kZWxFbGVtZW50LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2Fy Z291bWwvdWkvRGV0YWlsc1BhbmUuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9v cmcvYXJnb3VtbC91aS9EaXNwbGF5VGV4dFRyZWUuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwt YXBwL3NyYy9vcmcvYXJnb3VtbC91aS9IZWxwQm94LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1s LWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvTG9hZFN3aW5nV29ya2VyLmphdmENCiAgIHRydW5rL3Ny Yy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvTG9va0FuZEZlZWxNZ3IuamF2YQ0KICAg dHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9NdWx0aUVkaXRvclBhbmUu amF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9Qcm9qZWN0 QnJvd3Nlci5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3Vp L1N0eWxlUGFuZWwuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3Vt bC91aS9TdHlsZVBhbmVsRmlnLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3Jn L2FyZ291bWwvdWkvU3dpbmdXb3JrZXIuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3Ny Yy9vcmcvYXJnb3VtbC91aS9UYWJSZXN1bHRzLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFw cC9zcmMvb3JnL2FyZ291bWwvdWkvVGFiVGV4dC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1h cHAvc3JjL29yZy9hcmdvdW1sL3VpL1RyZWVNb2RlbENvbXBvc2l0ZS5qYXZhDQogICB0cnVuay9z cmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL1pvb21TbGlkZXJCdXR0b24uamF2YQ0K ICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9jbWQvQWN0aW9uR290 b0RpYWdyYW0uamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91 aS9jbWQvQ21kU2V0UHJlZmVycmVkU2l6ZS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAv c3JjL29yZy9hcmdvdW1sL3VpL2NtZC9HZW5lcmljQXJnb01lbnVCYXIuamF2YQ0KICAgdHJ1bmsv c3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9jbWQvTGFzdFJlY2VudGx5VXNlZE1l bnVMaXN0LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkv Y21kL1Nob3J0Y3V0TWdyLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2Fy Z291bWwvdWkvZXhwbG9yZXIvQWN0aW9uRGVwbG95UHJvZmlsZS5qYXZhDQogICB0cnVuay9zcmMv YXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL2V4cGxvcmVyL0FjdGlvbkV4cG9ydFByb2Zp bGVYTUkuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9l eHBsb3Jlci9EbkRFeHBsb3JlclRyZWUuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3Ny Yy9vcmcvYXJnb3VtbC91aS9leHBsb3Jlci9FeHBsb3JlckV2ZW50QWRhcHRvci5qYXZhDQogICB0 cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL2V4cGxvcmVyL0V4cGxvcmVy UGVyc3BlY3RpdmUuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3Vt bC91aS9leHBsb3Jlci9FeHBsb3JlclBvcHVwLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFw cC9zcmMvb3JnL2FyZ291bWwvdWkvZXhwbG9yZXIvRXhwbG9yZXJUcmVlTW9kZWwuamF2YQ0KICAg dHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9leHBsb3Jlci9OYW1lT3Jk ZXIuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9leHBs b3Jlci9QZXJzcGVjdGl2ZUNvbmZpZ3VyYXRvci5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1h cHAvc3JjL29yZy9hcmdvdW1sL3VpL2V4cGxvcmVyL1BlcnNwZWN0aXZlTWFuYWdlci5qYXZhDQog ICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL2V4cGxvcmVyL3J1bGVz L0dvU3RhdGVNYWNoaW5lVG9TdGF0ZS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3Jj L29yZy9hcmdvdW1sL3VpL3RhcmdldG1hbmFnZXIvVGFyZ2V0TWFuYWdlci5qYXZhDQogICB0cnVu ay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC9jb2duaXRpdmUvY2hlY2tsaXN0 L1VNTENoZWNrSXRlbS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdv dW1sL3VtbC9jb2duaXRpdmUvY3JpdGljcy9DaGlsZEdlblVNTC5qYXZhDQogICB0cnVuay9zcmMv YXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC9jb2duaXRpdmUvY3JpdGljcy9DckNpcmN1 bGFyQ29tcG9zaXRpb24uamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJn b3VtbC91bWwvY29nbml0aXZlL2NyaXRpY3MvQ3JDaXJjdWxhckluaGVyaXRhbmNlLmphdmENCiAg IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL2NvZ25pdGl2ZS9jcml0 aWNzL0NyRW1wdHlQYWNrYWdlLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3Jn L2FyZ291bWwvdW1sL2NvZ25pdGl2ZS9jcml0aWNzL0NyTXVsdGlwbGVEZWVwSGlzdG9yeVN0YXRl cy5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC9jb2du aXRpdmUvY3JpdGljcy9Dck11bHRpcGxlSW5pdGlhbFN0YXRlcy5qYXZhDQogICB0cnVuay9zcmMv YXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC9jb2duaXRpdmUvY3JpdGljcy9Dck11bHRp cGxlU2hhbGxvd0hpc3RvcnlTdGF0ZXMuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3Ny Yy9vcmcvYXJnb3VtbC91bWwvY29nbml0aXZlL2NyaXRpY3MvQ3JVTUwuamF2YQ0KICAgdHJ1bmsv c3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvY29nbml0aXZlL2NyaXRpY3MvVU1M V2l6YXJkLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1s L2NvZ25pdGl2ZS9jcml0aWNzL1dpekFzc29jQ29tcG9zaXRlLmphdmENCiAgIHRydW5rL3NyYy9h cmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL2NvZ25pdGl2ZS9jcml0aWNzL1dpekJyZWFr Q2lyY3VsYXJDb21wLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291 bWwvdW1sL2NvZ25pdGl2ZS9jcml0aWNzL1dpek1FTmFtZS5qYXZhDQogICB0cnVuay9zcmMvYXJn b3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC9jb2duaXRpdmUvY3JpdGljcy9XaXpNYW55TmFt ZXMuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvY29n bml0aXZlL2NyaXRpY3MvV2l6TmF2aWdhYmxlLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFw cC9zcmMvb3JnL2FyZ291bWwvdW1sL2NvZ25pdGl2ZS9jcml0aWNzL1dpek9wZXJOYW1lLmphdmEN CiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL2RpYWdyYW0vQXJn b0RpYWdyYW1JbXBsLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291 bWwvdW1sL2RpYWdyYW0vRGlhZ3JhbUFwcGVhcmFuY2UuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291 bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS9EaWFncmFtVW5kb01hbmFnZXIuamF2 YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS9E aWFncmFtVXRpbHMuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3Vt bC91bWwvZGlhZ3JhbS9Qcm9qZWN0TWVtYmVyRGlhZ3JhbS5qYXZhDQogICB0cnVuay9zcmMvYXJn b3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC9kaWFncmFtL1VNTE11dGFibGVHcmFwaFN1cHBv cnQuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlh Z3JhbS9hY3Rpdml0eS91aS9VTUxBY3Rpdml0eURpYWdyYW0uamF2YQ0KICAgdHJ1bmsvc3JjL2Fy Z291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS9jb2xsYWJvcmF0aW9uL0NvbGxh YkRpYWdyYW1HcmFwaE1vZGVsLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3Jn L2FyZ291bWwvdW1sL2RpYWdyYW0vY29sbGFib3JhdGlvbi91aS9Db2xsYWJEaWFncmFtUmVuZGVy ZXIuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlh Z3JhbS9jb2xsYWJvcmF0aW9uL3VpL1VNTENvbGxhYm9yYXRpb25EaWFncmFtLmphdmENCiAgIHRy dW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL2RpYWdyYW0vZGVwbG95bWVu dC9EZXBsb3ltZW50RGlhZ3JhbUdyYXBoTW9kZWwuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwt YXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS9kZXBsb3ltZW50L3VpL0RlcGxveW1lbnRE aWFncmFtUmVuZGVyZXIuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJn b3VtbC91bWwvZGlhZ3JhbS9kZXBsb3ltZW50L3VpL1VNTERlcGxveW1lbnREaWFncmFtLmphdmEN CiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL2RpYWdyYW0vbGF5 b3V0L0xheW91dEhlbHBlci5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9h cmdvdW1sL3VtbC9kaWFncmFtL2xheW91dC9MYXlvdXRlZENvbnRhaW5lci5qYXZhDQogICB0cnVu ay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC9kaWFncmFtL2xheW91dC9MYXlv dXRlZE5vZGUuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91 bWwvZGlhZ3JhbS9sYXlvdXQvTGF5b3V0ZXIuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBw L3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS9zdGF0ZS9TdGF0ZURpYWdyYW1HcmFwaE1vZGVs LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL2RpYWdy YW0vc3RhdGUvdWkvQnV0dG9uQWN0aW9uTmV3RWZmZWN0LmphdmENCiAgIHRydW5rL3NyYy9hcmdv dW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL2RpYWdyYW0vc3RhdGUvdWkvQnV0dG9uQWN0aW9u TmV3RXZlbnQuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91 bWwvZGlhZ3JhbS9zdGF0ZS91aS9GaWdTdHViU3RhdGUuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291 bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS9zdGF0ZS91aS9GaWdWZXJ0ZXguamF2 YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS9z dGF0ZS91aS9TdGF0ZURpYWdyYW1SZW5kZXJlci5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1h cHAvc3JjL29yZy9hcmdvdW1sL3VtbC9kaWFncmFtL3N0YXRlL3VpL1VNTFN0YXRlRGlhZ3JhbS5q YXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC9kaWFncmFt L3N0YXRpY19zdHJ1Y3R1cmUvQ2xhc3NEaWFncmFtR3JhcGhNb2RlbC5qYXZhDQogICB0cnVuay9z cmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC9kaWFncmFtL3N0YXRpY19zdHJ1Y3R1 cmUvbGF5b3V0L0NsYXNzZGlhZ3JhbUluaGVyaXRhbmNlRWRnZS5qYXZhDQogICB0cnVuay9zcmMv YXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC9kaWFncmFtL3N0YXRpY19zdHJ1Y3R1cmUv bGF5b3V0L0NsYXNzZGlhZ3JhbUxheW91dGVyLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFw cC9zcmMvb3JnL2FyZ291bWwvdW1sL2RpYWdyYW0vc3RhdGljX3N0cnVjdHVyZS9sYXlvdXQvQ2xh c3NkaWFncmFtTW9kZWxFbGVtZW50RmFjdG9yeS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1h cHAvc3JjL29yZy9hcmdvdW1sL3VtbC9kaWFncmFtL3N0YXRpY19zdHJ1Y3R1cmUvdWkvQ2xhc3NE aWFncmFtUmVuZGVyZXIuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJn b3VtbC91bWwvZGlhZ3JhbS9zdGF0aWNfc3RydWN0dXJlL3VpL0ZpZ0NvbW1lbnQuamF2YQ0KICAg dHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS9zdGF0aWNf c3RydWN0dXJlL3VpL0ZpZ0RhdGFUeXBlLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9z cmMvb3JnL2FyZ291bWwvdW1sL2RpYWdyYW0vc3RhdGljX3N0cnVjdHVyZS91aS9GaWdFZGdlTm90 ZS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC9kaWFn cmFtL3N0YXRpY19zdHJ1Y3R1cmUvdWkvRmlnSW50ZXJmYWNlLmphdmENCiAgIHRydW5rL3NyYy9h cmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL2RpYWdyYW0vc3RhdGljX3N0cnVjdHVyZS91 aS9GaWdQYWNrYWdlLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291 bWwvdW1sL2RpYWdyYW0vc3RhdGljX3N0cnVjdHVyZS91aS9GaWdTdGVyZW90eXBlRGVjbGFyYXRp b24uamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlh Z3JhbS9zdGF0aWNfc3RydWN0dXJlL3VpL1NlbGVjdGlvbkNsYXNzLmphdmENCiAgIHRydW5rL3Ny Yy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL2RpYWdyYW0vc3RhdGljX3N0cnVjdHVy ZS91aS9TZWxlY3Rpb25Db21wYXJ0bWVudFRleHQuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwt YXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS9zdGF0aWNfc3RydWN0dXJlL3VpL1NlbGVj dGlvbkdlbmVyYWxpemFibGVFbGVtZW50LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9z cmMvb3JnL2FyZ291bWwvdW1sL2RpYWdyYW0vc3RhdGljX3N0cnVjdHVyZS91aS9VTUxDbGFzc0Rp YWdyYW0uamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwv ZGlhZ3JhbS91aS9BYnN0cmFjdEFjdGlvbkNoZWNrQm94TWVudUl0ZW0uamF2YQ0KICAgdHJ1bmsv c3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS91aS9BYnN0cmFjdEFj dGlvblJhZGlvTWVudUl0ZW0uamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcv YXJnb3VtbC91bWwvZGlhZ3JhbS91aS9BY3Rpb25BZGRBbGxDbGFzc2VzRnJvbU1vZGVsLmphdmEN CiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL2RpYWdyYW0vdWkv QWN0aW9uQWRkQ29uY3VycmVudFJlZ2lvbi5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAv c3JjL29yZy9hcmdvdW1sL3VtbC9kaWFncmFtL3VpL0FjdGlvbkFkZEV4aXN0aW5nRWRnZS5qYXZh DQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC9kaWFncmFtL3Vp L0FjdGlvbkFkZEV4aXN0aW5nTm9kZS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3Jj L29yZy9hcmdvdW1sL3VtbC9kaWFncmFtL3VpL0FjdGlvbkFkZEV4aXN0aW5nTm9kZXMuamF2YQ0K ICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS91aS9B Y3Rpb25BZGRFeHRlbnNpb25Qb2ludC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3Jj L29yZy9hcmdvdW1sL3VtbC9kaWFncmFtL3VpL0FjdGlvbkFkZE1lc3NhZ2UuamF2YQ0KICAgdHJ1 bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS91aS9BY3Rpb25B ZGROb3RlLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1s L2RpYWdyYW0vdWkvQWN0aW9uQWdncmVnYXRpb24uamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwt YXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS91aS9BY3Rpb25Db21wYXJ0bWVudERpc3Bs YXkuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlh Z3JhbS91aS9BY3Rpb25FZGdlc0Rpc3BsYXkuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBw L3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS91aS9BY3Rpb25NdWx0aXBsaWNpdHkuamF2YQ0K ICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS91aS9B Y3Rpb25TYXZlRGlhZ3JhbVRvQ2xpcGJvYXJkLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFw cC9zcmMvb3JnL2FyZ291bWwvdW1sL2RpYWdyYW0vdWkvQWN0aW9uU2V0TW9kZS5qYXZhDQogICB0 cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC9kaWFncmFtL3VpL0FyZ29G aWdHcm91cC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3Vt bC9kaWFncmFtL3VpL0RpYWdyYW1OYW1lRG9jdW1lbnQuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291 bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS91aS9EbkRKR3JhcGguamF2YQ0KICAg dHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS91aS9GaWdB c3NvY2lhdGlvbi5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1s L3VtbC9kaWFncmFtL3VpL0ZpZ0NvbXBhcnRtZW50LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1s LWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL2RpYWdyYW0vdWkvRmlnQ29tcGFydG1lbnRCb3guamF2 YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS91 aS9GaWdFZGdlQXNzb2NpYXRpb25DbGFzcy5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAv c3JjL29yZy9hcmdvdW1sL3VtbC9kaWFncmFtL3VpL0ZpZ0VkZ2VNb2RlbEVsZW1lbnQuamF2YQ0K ICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS91aS9G aWdOb2RlTW9kZWxFbGVtZW50LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3Jn L2FyZ291bWwvdW1sL2RpYWdyYW0vdWkvRmlnU2luZ2xlTGluZVRleHQuamF2YQ0KICAgdHJ1bmsv c3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS91aS9GaWdTdGVyZW90 eXBlc0dyb3VwLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwv dW1sL2RpYWdyYW0vdWkvTW9kZUFkZFRvRGlhZ3JhbS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3Vt bC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC9kaWFncmFtL3VpL01vZGVDcmVhdGVBc3NvY2lhdGlv bkNsYXNzLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1s L2RpYWdyYW0vdWkvTW9kZUNyZWF0ZUdyYXBoRWRnZS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3Vt bC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC9kaWFncmFtL3VpL01vZGVMYWJlbERyYWcuamF2YQ0K ICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS91aS9Q YXRoSXRlbVBsYWNlbWVudC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9h cmdvdW1sL3VtbC9kaWFncmFtL3VpL1NlbGVjdGlvbk5vZGVDbGFyaWZpZXJzMi5qYXZhDQogICB0 cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC9kaWFncmFtL3VpL1NlbGVj dGlvblJlcm91dGVFZGdlLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2Fy Z291bWwvdW1sL2RpYWdyYW0vdWkvVGFiRGlhZ3JhbS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3Vt bC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC9kaWFncmFtL3VpL1VNTERpYWdyYW0uamF2YQ0KICAg dHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS91c2VfY2Fz ZS9Vc2VDYXNlRGlhZ3JhbUdyYXBoTW9kZWwuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBw L3NyYy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS91c2VfY2FzZS91aS9TdHlsZVBhbmVsRmlnVXNl Q2FzZS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC9k aWFncmFtL3VzZV9jYXNlL3VpL1VNTFVzZUNhc2VEaWFncmFtLmphdmENCiAgIHRydW5rL3NyYy9h cmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL2RpYWdyYW0vdXNlX2Nhc2UvdWkvVXNlQ2Fz ZURpYWdyYW1SZW5kZXJlci5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9h cmdvdW1sL3VtbC9nZW5lcmF0b3IvQWJzdHJhY3RTZWN0aW9uLmphdmENCiAgIHRydW5rL3NyYy9h cmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL2dlbmVyYXRvci9HZW5lcmF0b3JNYW5hZ2Vy LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL2dlbmVy YXRvci9UZW1wRmlsZVV0aWxzLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3Jn L2FyZ291bWwvdW1sL2dlbmVyYXRvci91aS9DbGFzc0dlbmVyYXRpb25EaWFsb2cuamF2YQ0KICAg dHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvcmV2ZW5nL0RpYWdyYW1J bnRlcmZhY2UuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91 bWwvcmV2ZW5nL0ltcG9ydENsYXNzTG9hZGVyLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFw cC9zcmMvb3JnL2FyZ291bWwvdW1sL3JldmVuZy9JbXBvcnRlck1hbmFnZXIuamF2YQ0KICAgdHJ1 bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvdWkvQWJzdHJhY3RBY3Rpb25B ZGRNb2RlbEVsZW1lbnQyLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2Fy Z291bWwvdW1sL3VpL0Fic3RyYWN0QWN0aW9uTmF2aWdhdGUuamF2YQ0KICAgdHJ1bmsvc3JjL2Fy Z291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvdWkvQWN0aW9uQWRkRGlhZ3JhbS5qYXZhDQog ICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC91aS9BY3Rpb25BZGRQ YWNrYWdlLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1s L3VpL0FjdGlvbkNsYXNzRGlhZ3JhbS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3Jj L29yZy9hcmdvdW1sL3VtbC91aS9BY3Rpb25EZWxldGVNb2RlbEVsZW1lbnRzLmphdmENCiAgIHRy dW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL3VpL0FjdGlvbkRlcGxveW1l bnREaWFncmFtLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwv dW1sL3VpL0FjdGlvbkdlbmVyYXRlQWxsLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9z cmMvb3JnL2FyZ291bWwvdW1sL3VpL0FjdGlvbkdlbmVyYXRlT25lLmphdmENCiAgIHRydW5rL3Ny Yy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL3VpL0FjdGlvbkdlbmVyYXRlUHJvamVj dENvZGUuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwv dWkvQWN0aW9uSW1wb3J0RnJvbVNvdXJjZXMuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBw L3NyYy9vcmcvYXJnb3VtbC91bWwvdWkvQWN0aW9uTmV3RGlhZ3JhbS5qYXZhDQogICB0cnVuay9z cmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC91aS9BY3Rpb25TYXZlQWxsR3JhcGhp Y3MuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvdWkv QWN0aW9uU2F2ZUdyYXBoaWNzLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3Jn L2FyZ291bWwvdW1sL3VpL0FjdGlvblNhdmVQcm9qZWN0LmphdmENCiAgIHRydW5rL3NyYy9hcmdv dW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL3VpL0FjdGlvblNhdmVQcm9qZWN0QXMuamF2YQ0K ICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvdWkvQWN0aW9uU2V0 U291cmNlUGF0aC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1s L3VtbC91aS9BY3Rpb25Vc2VDYXNlRGlhZ3JhbS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1h cHAvc3JjL29yZy9hcmdvdW1sL3VtbC91aS9MYWJlbGxlZExheW91dC5qYXZhDQogICB0cnVuay9z cmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC91aS9Qcm9wUGFuZWwuamF2YQ0KICAg dHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvdWkvU2F2ZUdyYXBoaWNz TWFuYWdlci5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3Vt bC91aS9Tb3VyY2VQYXRoVGFibGVNb2RlbC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAv c3JjL29yZy9hcmdvdW1sL3VtbC91aS9UYWJDb25zdHJhaW50cy5qYXZhDQogICB0cnVuay9zcmMv YXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC91aS9UYWJQcm9wcy5qYXZhDQogICB0cnVu ay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC91aS9UYWJTcmMuamF2YQ0KICAg dHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvdWkvVGFiU3R5bGUuamF2 YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvdWkvVGFiVGFn Z2VkVmFsdWVzLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwv dW1sL3VpL1RhYlRhZ2dlZFZhbHVlc01vZGVsLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFw cC9zcmMvb3JnL2FyZ291bWwvdW1sL3VpL1VNTENvbWJvQm94TW9kZWwyLmphdmENCiAgIHRydW5r L3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL3VpL1VNTENvbmRpdGlvbkV4cHJl c3Npb25Nb2RlbC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1s L3VtbC91aS9VTUxFeHByZXNzaW9uQm9keUZpZWxkLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1s LWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL3VpL1VNTE1vZGVsRWxlbWVudExpc3RNb2RlbDIuamF2 YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvdWkvVU1MUGxh aW5UZXh0RG9jdW1lbnQuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJn b3VtbC91bWwvdWkvVU1MUmFkaW9CdXR0b25QYW5lbC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3Vt bC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC91aS9VTUxSZWN1cnJlbmNlRXhwcmVzc2lvbk1vZGVs LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL3VpL1VN TFN0ZXJlb3R5cGVMaXN0TW9kZWwuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9v cmcvYXJnb3VtbC91bWwvdWkvVU1MVGltZUV4cHJlc3Npb25Nb2RlbC5qYXZhDQogICB0cnVuay9z cmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC91aS9iZWhhdmlvci9hY3Rpdml0eV9n cmFwaHMvQWN0aW9uTmV3RW50cnlDYWxsQWN0aW9uLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1s LWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL3VpL2JlaGF2aW9yL2FjdGl2aXR5X2dyYXBocy9BY3Rp b25TZXRTeW5jaC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1s L3VtbC91aS9iZWhhdmlvci9jb21tb25fYmVoYXZpb3IvQWN0aW9uU2V0QWN0aW9uQXN5bmNocm9u b3VzLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL3Vp L2JlaGF2aW9yL3N0YXRlX21hY2hpbmVzL0J1dHRvbkFjdGlvbk5ld0d1YXJkLmphdmENCiAgIHRy dW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL3VpL2JlaGF2aW9yL3N0YXRl X21hY2hpbmVzL1VNTENoYW5nZUV4cHJlc3Npb25Nb2RlbC5qYXZhDQogICB0cnVuay9zcmMvYXJn b3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC91aS9iZWhhdmlvci9zdGF0ZV9tYWNoaW5lcy9V TUxTeW5jaFN0YXRlQm91bmREb2N1bWVudC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAv c3JjL29yZy9hcmdvdW1sL3VtbC91aS9mb3VuZGF0aW9uL2NvcmUvQWN0aW9uQWRkQXR0cmlidXRl LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL3VpL2Zv dW5kYXRpb24vY29yZS9BY3Rpb25BZGRFbnVtZXJhdGlvbkxpdGVyYWwuamF2YQ0KICAgdHJ1bmsv c3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvdWkvZm91bmRhdGlvbi9jb3JlL0Fj dGlvbkFkZE9wZXJhdGlvbi5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9h cmdvdW1sL3VtbC91aS9mb3VuZGF0aW9uL2NvcmUvQWN0aW9uU2V0QXNzb2NpYXRpb25FbmROYXZp Z2FibGUuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwv dWkvZm91bmRhdGlvbi9jb3JlL0FjdGlvblNldEFzc29jaWF0aW9uRW5kT3JkZXJpbmcuamF2YQ0K ICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvdWkvZm91bmRhdGlv bi9jb3JlL0FjdGlvblNldEFzc29jaWF0aW9uRW5kVGFyZ2V0U2NvcGUuamF2YQ0KICAgdHJ1bmsv c3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvdWkvZm91bmRhdGlvbi9jb3JlL0Fj dGlvblNldEJlaGF2aW9yYWxGZWF0dXJlUXVlcnkuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwt YXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvdWkvZm91bmRhdGlvbi9jb3JlL0FjdGlvblNldENoYW5n ZWFiaWxpdHkuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91 bWwvdWkvZm91bmRhdGlvbi9jb3JlL0FjdGlvblNldENsYXNzQWN0aXZlLmphdmENCiAgIHRydW5r L3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdW1sL3VpL2ZvdW5kYXRpb24vY29yZS9B Y3Rpb25TZXRFbGVtZW50T3duZXJzaGlwU3BlY2lmaWNhdGlvbi5qYXZhDQogICB0cnVuay9zcmMv YXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC91aS9mb3VuZGF0aW9uL2NvcmUvQWN0aW9u U2V0R2VuZXJhbGl6YWJsZUVsZW1lbnRBYnN0cmFjdC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3Vt bC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC91aS9mb3VuZGF0aW9uL2NvcmUvQWN0aW9uU2V0R2Vu ZXJhbGl6YWJsZUVsZW1lbnRMZWFmLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMv b3JnL2FyZ291bWwvdW1sL3VpL2ZvdW5kYXRpb24vY29yZS9BY3Rpb25TZXRHZW5lcmFsaXphYmxl RWxlbWVudFJvb3QuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3Vt bC91bWwvdWkvZm91bmRhdGlvbi9jb3JlL0FjdGlvblNldE1vZGVsRWxlbWVudFZpc2liaWxpdHku amF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91bWwvdWkvZm91 bmRhdGlvbi9jb3JlL0FjdGlvblNldE9wZXJhdGlvbkNvbmN1cnJlbmN5S2luZC5qYXZhDQogICB0 cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC91aS9mb3VuZGF0aW9uL2Nv cmUvQWN0aW9uU2V0UGFyYW1ldGVyRGlyZWN0aW9uS2luZC5qYXZhDQogICB0cnVuay9zcmMvYXJn b3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VtbC91aS9mb3VuZGF0aW9uL2NvcmUvQWN0aW9uU2V0 U3RydWN0dXJhbEZlYXR1cmVUYXJnZXRTY29wZS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1h cHAvc3JjL29yZy9hcmdvdW1sL3VtbC91aS9mb3VuZGF0aW9uL2V4dGVuc2lvbl9tZWNoYW5pc21z L0FjdGlvbk5ld1N0ZXJlb3R5cGUuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9v cmcvYXJnb3VtbC91bWwvdWkvZm91bmRhdGlvbi9leHRlbnNpb25fbWVjaGFuaXNtcy9BY3Rpb25O ZXdUYWdEZWZpbml0aW9uLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2Fy Z291bWwvdW1sL3VpL2ZvdW5kYXRpb24vZXh0ZW5zaW9uX21lY2hhbmlzbXMvVU1MVGFnRGVmaW5p dGlvbkNvbWJvQm94TW9kZWwuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcv YXJnb3VtbC91bWwvdXRpbC9uYW1lc3BhY2UvU3RyaW5nTmFtZXNwYWNlLmphdmENCiAgIHRydW5r L3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdXRpbC9BcmdvRnJhbWUuamF2YQ0KICAg dHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91dGlsL0l0ZW1VSUQuamF2YQ0K ICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91dGlsL1Rvb2xCYXJVdGls aXR5LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdXRpbC9U b29scy5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3V0aWwv bG9nZ2luZy9Bd3RFeGNlcHRpb25IYW5kbGVyLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFw cC9zcmMvb3JnL2FyZ291bWwvdXRpbC9vc2RlcC9PU1hBZGFwdGVyLmphdmENCiAgIHRydW5rL3Ny Yy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdXRpbC9vc2RlcC9TdGFydEJyb3dzZXIuamF2 YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3Rlc3RzL29yZy9hcmdvdW1sL2tlcm5lbC9UZXN0 UHJvamVjdE1hbmFnZXIuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3Rlc3RzL29yZy9h cmdvdW1sL21vZGVsL1Rlc3RBR0hlbHBlcldpdGhNb2NrLmphdmENCiAgIHRydW5rL3NyYy9hcmdv dW1sLWFwcC90ZXN0cy9vcmcvYXJnb3VtbC9tb2RlbC9UZXN0QWN0aXZpdHlHcmFwaFN0YXRlTWFj aGluZS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvdGVzdHMvb3JnL2FyZ291bWwvcHJv ZmlsZS9Qcm9maWxlTW90aGVyLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC90ZXN0cy9v cmcvYXJnb3VtbC9wcm9maWxlL1Rlc3RQcm9maWxlTWFuYWdlci5qYXZhDQogICB0cnVuay9zcmMv YXJnb3VtbC1hcHAvdGVzdHMvb3JnL2FyZ291bWwvcHJvZmlsZS9UZXN0UHJvZmlsZU1vdGhlci5q YXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvdGVzdHMvb3JnL2FyZ291bWwvcHJvZmlsZS9U ZXN0UmVhZGVyTW9kZWxMb2FkZXIuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3Rlc3Rz L29yZy9hcmdvdW1sL3Byb2ZpbGUvaW50ZXJuYWwvVGVzdEZvcm1hdGluZ1N0cmF0ZWd5VU1MLmph dmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC90ZXN0cy9vcmcvYXJnb3VtbC91aS9jbWQvR1VJ VGVzdEFjdGlvbkdvdG9EaWFncmFtLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC90ZXN0 cy9vcmcvYXJnb3VtbC91bWwvVGVzdFVVSURNYW5hZ2VyLmphdmENCiAgIHRydW5rL3NyYy9hcmdv dW1sLWFwcC90ZXN0cy9vcmcvYXJnb3VtbC91bWwvY29nbml0aXZlL2NyaXRpY3MvVGVzdENyVW5j b252ZW50aW9uYWxBdHRyTmFtZS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvdGVzdHMv b3JnL2FyZ291bWwvdW1sL2NvZ25pdGl2ZS9jcml0aWNzL1Rlc3RDclVuY29udmVudGlvbmFsQ2xh c3NOYW1lLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC90ZXN0cy9vcmcvYXJnb3VtbC91 bWwvY29nbml0aXZlL2NyaXRpY3MvVGVzdENyVW5jb252ZW50aW9uYWxQYWNrTmFtZS5qYXZhDQog ICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvdGVzdHMvb3JnL2FyZ291bWwvdW1sL2RpYWdyYW0vVGVz dERpYWdyYW1GYWN0b3J5LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC90ZXN0cy9vcmcv YXJnb3VtbC91bWwvZGlhZ3JhbS9UZXN0RGlhZ3JhbVNldHRpbmdzLmphdmENCiAgIHRydW5rL3Ny Yy9hcmdvdW1sLWFwcC90ZXN0cy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS9hY3Rpdml0eS91aS9U ZXN0VU1MQWN0aXZpdHlEaWFncmFtLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC90ZXN0 cy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS9jb2xsYWJvcmF0aW9uL3VpL1Rlc3RVTUxDb2xsYWJv cmF0aW9uRGlhZ3JhbS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvdGVzdHMvb3JnL2Fy Z291bWwvdW1sL2RpYWdyYW0vc3RhdGUvdWkvVGVzdFVNTFN0YXRlRGlhZ3JhbS5qYXZhDQogICB0 cnVuay9zcmMvYXJnb3VtbC1hcHAvdGVzdHMvb3JnL2FyZ291bWwvdW1sL2RpYWdyYW0vdXNlX2Nh c2UvdWkvVGVzdEZpZ0Nsb25hYmxlLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC90ZXN0 cy9vcmcvYXJnb3VtbC91bWwvZGlhZ3JhbS91c2VfY2FzZS91aS9UZXN0VU1MVXNlQ2FzZURpYWdy YW0uamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3Rlc3RzL29yZy9hcmdvdW1sL3VtbC91 aS9HVUlUZXN0QWN0aW9uT3BlblByb2plY3QuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtYXBw L3Rlc3RzL29yZy9hcmdvdW1sL3VtbC91aS9HVUlUZXN0QWN0aW9uU2F2ZUdyYXBoaWNzLmphdmEN CiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC90ZXN0cy9vcmcvYXJnb3VtbC91bWwvdWkvVGVzdEFj dGlvbkFjdGl2aXR5R3JhcGhEaWFncmFtLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC90 ZXN0cy9vcmcvYXJnb3VtbC91bWwvdWkvVGVzdEFjdGlvbkNvbGxhYm9yYXRpb25EaWFncmFtLmph dmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWFwcC90ZXN0cy9vcmcvYXJnb3VtbC91bWwvdWkvVGVz dEFjdGlvblN0YXRlRGlhZ3JhbS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1hcHAvdGVzdHMv b3JnL2FyZ291bWwvdW1sL3VpL1Rlc3RTb3VyY2VQYXRoQ29udHJvbGxlci5qYXZhDQogICB0cnVu ay9zcmMvYXJnb3VtbC1hcHAvdGVzdHMvb3JnL2FyZ291bWwvdW1sL3VpL2JlaGF2aW9yL2NvbW1v bl9iZWhhdmlvci9UZXN0QWN0aW9uTmV3UmVjZXB0aW9uLmphdmENCiAgIHRydW5rL3NyYy9hcmdv dW1sLWFwcC90ZXN0cy9vcmcvYXJnb3VtbC91bWwvdXRpbC9uYW1lc3BhY2UvVGVzdFN0cmluZ05h bWVzcGFjZS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1idWlsZC9idWlsZC54bWwNCiAgIHRy dW5rL3NyYy9hcmdvdW1sLWNvcmUtZGlhZ3JhbXMtYWN0aXZpdHkyL01FVEEtSU5GL01BTklGRVNU Lk1GDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLWRpYWdyYW1zLWFjdGl2aXR5Mi9idWlsZC54 bWwNCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtZGlhZ3JhbXMtYWN0aXZpdHkyL3BvbS54bWwN CiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtZGlhZ3JhbXMtYWN0aXZpdHkyL3NyYy9vcmcvYXJn b3VtbC9hY3Rpdml0eTIvQWN0aXZpdHlEaWFncmFtTW9kdWxlLmphdmENCiAgIHRydW5rL3NyYy9h cmdvdW1sLWNvcmUtZGlhZ3JhbXMtYWN0aXZpdHkyL3NyYy9vcmcvYXJnb3VtbC9hY3Rpdml0eTIv ZGlhZ3JhbS9BY3Rpdml0eURpYWdyYW1GYWN0b3J5LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1s LWNvcmUtZGlhZ3JhbXMtYWN0aXZpdHkyL3NyYy9vcmcvYXJnb3VtbC9hY3Rpdml0eTIvZGlhZ3Jh bS9BY3Rpdml0eURpYWdyYW1HcmFwaE1vZGVsLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNv cmUtZGlhZ3JhbXMtYWN0aXZpdHkyL3NyYy9vcmcvYXJnb3VtbC9hY3Rpdml0eTIvZGlhZ3JhbS9B Y3Rpdml0eURpYWdyYW1SZW5kZXJlci5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLWRp YWdyYW1zLWFjdGl2aXR5Mi9zcmMvb3JnL2FyZ291bWwvYWN0aXZpdHkyL2RpYWdyYW0vQmFzZURp YWdyYW0uamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS1kaWFncmFtcy1hY3Rpdml0eTIv c3JjL29yZy9hcmdvdW1sL2FjdGl2aXR5Mi9kaWFncmFtL0ZpZ0Jhc2VQcmVzZW50YXRpb24uamF2 YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS1kaWFncmFtcy1hY3Rpdml0eTIvc3JjL29yZy9h cmdvdW1sL2FjdGl2aXR5Mi9kaWFncmFtL0ZpZ0NvbXBvc2l0ZS5qYXZhDQogICB0cnVuay9zcmMv YXJnb3VtbC1jb3JlLWRpYWdyYW1zLWFjdGl2aXR5Mi9zcmMvb3JnL2FyZ291bWwvYWN0aXZpdHky L2RpYWdyYW0vRmlnTmFtZWRQZW50YWdvbi5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3Jl LWRpYWdyYW1zLWFjdGl2aXR5Mi9zcmMvb3JnL2FyZ291bWwvYWN0aXZpdHkyL2RpYWdyYW0vRmln TmFtZWRSUmVjdC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLWRpYWdyYW1zLWFjdGl2 aXR5Mi9zcmMvb3JnL2FyZ291bWwvYWN0aXZpdHkyL2RpYWdyYW0vRmlnTm90YXRpb24uamF2YQ0K ICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS1kaWFncmFtcy1hY3Rpdml0eTIvc3JjL29yZy9hcmdv dW1sL2FjdGl2aXR5Mi9kaWFncmFtL01vZGVQbGFjZURpYWdyYW1FbGVtZW50LmphdmENCiAgIHRy dW5rL3NyYy9hcmdvdW1sLWNvcmUtZGlhZ3JhbXMtY2xhc3MyL01FVEEtSU5GL01BTklGRVNULk1G DQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLWRpYWdyYW1zLWNsYXNzMi9idWlsZC54bWwNCiAg IHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtZGlhZ3JhbXMtY2xhc3MyL3BvbS54bWwNCiAgIHRydW5r L3NyYy9hcmdvdW1sLWNvcmUtZGlhZ3JhbXMtZGVwbG95bWVudDIvTUVUQS1JTkYvTUFOSUZFU1Qu TUYNCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtZGlhZ3JhbXMtZGVwbG95bWVudDIvYnVpbGQu eG1sDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLWRpYWdyYW1zLWRlcGxveW1lbnQyL3BvbS54 bWwNCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtZGlhZ3JhbXMtZGVwbG95bWVudDIvc3JjL29y Zy9hcmdvdW1sL2RlcGxveW1lbnQyL0RlcGxveW1lbnREaWFncmFtTW9kdWxlLmphdmENCiAgIHRy dW5rL3NyYy9hcmdvdW1sLWNvcmUtZGlhZ3JhbXMtZGVwbG95bWVudDIvc3JjL29yZy9hcmdvdW1s L2RlcGxveW1lbnQyL2RpYWdyYW0vVU1MRGVwbG95bWVudERpYWdyYW0uamF2YQ0KICAgdHJ1bmsv c3JjL2FyZ291bWwtY29yZS1kaWFncmFtcy1zZXF1ZW5jZTIvTUVUQS1JTkYvTUFOSUZFU1QuTUYN CiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtZGlhZ3JhbXMtc2VxdWVuY2UyL2J1aWxkLnhtbA0K ICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS1kaWFncmFtcy1zZXF1ZW5jZTIvcG9tLnhtbA0KICAg dHJ1bmsvc3JjL2FyZ291bWwtY29yZS1kaWFncmFtcy1zZXF1ZW5jZTIvc3JjL29yZy9hcmdvdW1s L3NlcXVlbmNlMi9TZXF1ZW5jZURpYWdyYW1Nb2R1bGUuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291 bWwtY29yZS1kaWFncmFtcy1zZXF1ZW5jZTIvc3JjL29yZy9hcmdvdW1sL3NlcXVlbmNlMi9kaWFn cmFtL0ZpZ0FjdGl2YXRpb24uamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS1kaWFncmFt cy1zZXF1ZW5jZTIvc3JjL29yZy9hcmdvdW1sL3NlcXVlbmNlMi9kaWFncmFtL0ZpZ01lc3NhZ2Uu amF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS1kaWFncmFtcy1zZXF1ZW5jZTIvc3JjL29y Zy9hcmdvdW1sL3NlcXVlbmNlMi9kaWFncmFtL01vZGVDcmVhdGVNZXNzYWdlLmphdmENCiAgIHRy dW5rL3NyYy9hcmdvdW1sLWNvcmUtZGlhZ3JhbXMtc2VxdWVuY2UyL3NyYy9vcmcvYXJnb3VtbC9z ZXF1ZW5jZTIvZGlhZ3JhbS9TZWxlY3Rpb25NZXNzYWdlLmphdmENCiAgIHRydW5rL3NyYy9hcmdv dW1sLWNvcmUtZGlhZ3JhbXMtc2VxdWVuY2UyL3NyYy9vcmcvYXJnb3VtbC9zZXF1ZW5jZTIvZGlh Z3JhbS9TZXF1ZW5jZURpYWdyYW1GYWN0b3J5LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNv cmUtZGlhZ3JhbXMtc2VxdWVuY2UyL3NyYy9vcmcvYXJnb3VtbC9zZXF1ZW5jZTIvZGlhZ3JhbS9T ZXF1ZW5jZURpYWdyYW1HcmFwaE1vZGVsLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUt ZGlhZ3JhbXMtc2VxdWVuY2UyL3NyYy9vcmcvYXJnb3VtbC9zZXF1ZW5jZTIvZGlhZ3JhbS9TZXF1 ZW5jZURpYWdyYW1SZW5kZXJlci5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLWRpYWdy YW1zLXNlcXVlbmNlMi9zcmMvb3JnL2FyZ291bWwvc2VxdWVuY2UyL2RpYWdyYW0vVU1MU2VxdWVu Y2VEaWFncmFtLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtZGlhZ3JhbXMtc2VxdWVu Y2UyL3Rlc3RzL29yZy9hcmdvdW1sL3NlcXVlbmNlMi9kaWFncmFtL1Rlc3RGaWdNZXNzYWdlU3Bs aW5lLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtZGlhZ3JhbXMtc2VxdWVuY2UyL3Rl c3RzL29yZy9hcmdvdW1sL3NlcXVlbmNlMi9kaWFncmFtL1Rlc3RVTUxTZXF1ZW5jZURpYWdyYW0u amF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS1kaWFncmFtcy1zdGF0ZTIvTUVUQS1JTkYv TUFOSUZFU1QuTUYNCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtZGlhZ3JhbXMtc3RhdGUyL2J1 aWxkLnhtbA0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS1kaWFncmFtcy1zdGF0ZTIvcG9tLnht bA0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS1kaWFncmFtcy1zdGF0ZTIvc3JjL29yZy9hcmdv dW1sL3N0YXRlMi9TdGF0ZURpYWdyYW1Nb2R1bGUuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwt Y29yZS1kaWFncmFtcy1zdGF0ZTIvc3JjL29yZy9hcmdvdW1sL3N0YXRlMi9kaWFncmFtL0ZpZ0Vu dHJ5UG9pbnQuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS1kaWFncmFtcy1zdGF0ZTIv c3JjL29yZy9hcmdvdW1sL3N0YXRlMi9kaWFncmFtL0ZpZ0V4aXRQb2ludC5qYXZhDQogICB0cnVu ay9zcmMvYXJnb3VtbC1jb3JlLWRpYWdyYW1zLXN0YXRlMi9zcmMvb3JnL2FyZ291bWwvc3RhdGUy L2RpYWdyYW0vRmlnVmVydGV4LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtZGlhZ3Jh bXMtc3RhdGUyL3NyYy9vcmcvYXJnb3VtbC9zdGF0ZTIvZGlhZ3JhbS9VTUxTdGF0ZURpYWdyYW0u amF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS1kaWFncmFtcy1zdHJ1Y3R1cmUyL01FVEEt SU5GL01BTklGRVNULk1GDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLWRpYWdyYW1zLXN0cnVj dHVyZTIvYnVpbGQueG1sDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLWRpYWdyYW1zLXN0cnVj dHVyZTIvcG9tLnhtbA0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS1tb2RlbC1ldW1sL01FVEEt SU5GL01BTklGRVNULk1GDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLW1vZGVsLWV1bWwvYnVp bGQueG1sDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLW1vZGVsLWV1bWwvcG9tLnhtbA0KICAg dHJ1bmsvc3JjL2FyZ291bWwtY29yZS1tb2RlbC1ldW1sL3NyYy9vcmcvYXJnb3VtbC9tb2RlbC9l dW1sL0NvbmN1cnJlbmN5S2luZEVVTUxJbXBsLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNv cmUtbW9kZWwtZXVtbC9zcmMvb3JnL2FyZ291bWwvbW9kZWwvZXVtbC9Db3JlSGVscGVyRVVNTElt cGwuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS1tb2RlbC1ldW1sL3NyYy9vcmcvYXJn b3VtbC9tb2RlbC9ldW1sL0VVTUxNb2RlbEltcGxlbWVudGF0aW9uLmphdmENCiAgIHRydW5rL3Ny Yy9hcmdvdW1sLWNvcmUtbW9kZWwtZXVtbC9zcmMvb3JnL2FyZ291bWwvbW9kZWwvZXVtbC9GYWNh ZGVFVU1MSW1wbC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLW1vZGVsLWV1bWwvc3Jj L29yZy9hcmdvdW1sL21vZGVsL2V1bWwvTW9kZWxFdmVudFB1bXBFVU1MSW1wbC5qYXZhDQogICB0 cnVuay9zcmMvYXJnb3VtbC1jb3JlLW1vZGVsLWV1bWwvc3JjL29yZy9hcmdvdW1sL21vZGVsL2V1 bWwvU3RhdGVNYWNoaW5lc0hlbHBlckVVTUxJbXBsLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1s LWNvcmUtbW9kZWwtZXVtbC9zcmMvb3JnL2FyZ291bWwvbW9kZWwvZXVtbC9VbWxGYWN0b3J5RVVN TEltcGwuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS1tb2RlbC1ldW1sL3NyYy9vcmcv YXJnb3VtbC9tb2RlbC9ldW1sL1htaVJlYWRlckVVTUxJbXBsLmphdmENCiAgIHRydW5rL3NyYy9h cmdvdW1sLWNvcmUtbW9kZWwtbWRyL01FVEEtSU5GL01BTklGRVNULk1GDQogICB0cnVuay9zcmMv YXJnb3VtbC1jb3JlLW1vZGVsLW1kci9idWlsZC54bWwNCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNv cmUtbW9kZWwtbWRyL3BvbS54bWwNCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtbW9kZWwtbWRy L3NyYy9vcmcvYXJnb3VtbC9tb2RlbC9tZHIvQ29sbGFib3JhdGlvbnNIZWxwZXJNRFJJbXBsLmph dmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtbW9kZWwtbWRyL3NyYy9vcmcvYXJnb3VtbC9t b2RlbC9tZHIvQ29yZUZhY3RvcnlNRFJJbXBsLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNv cmUtbW9kZWwtbWRyL3NyYy9vcmcvYXJnb3VtbC9tb2RlbC9tZHIvQ29yZUhlbHBlck1EUkltcGwu amF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS1tb2RlbC1tZHIvc3JjL29yZy9hcmdvdW1s L21vZGVsL21kci9EYXRhVHlwZXNGYWN0b3J5TURSSW1wbC5qYXZhDQogICB0cnVuay9zcmMvYXJn b3VtbC1jb3JlLW1vZGVsLW1kci9zcmMvb3JnL2FyZ291bWwvbW9kZWwvbWRyL0V4dGVuc2lvbk1l Y2hhbmlzbXNIZWxwZXJNRFJJbXBsLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtbW9k ZWwtbWRyL3NyYy9vcmcvYXJnb3VtbC9tb2RlbC9tZHIvRmFjYWRlTURSSW1wbC5qYXZhDQogICB0 cnVuay9zcmMvYXJnb3VtbC1jb3JlLW1vZGVsLW1kci9zcmMvb3JnL2FyZ291bWwvbW9kZWwvbWRy L01EUk1vZGVsSW1wbGVtZW50YXRpb24uamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS1t b2RlbC1tZHIvc3JjL29yZy9hcmdvdW1sL21vZGVsL21kci9NZXNzYWdlU29ydE1EUkltcGwuamF2 YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS1tb2RlbC1tZHIvc3JjL29yZy9hcmdvdW1sL21v ZGVsL21kci9Nb2RlbEV2ZW50UHVtcE1EUkltcGwuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwt Y29yZS1tb2RlbC1tZHIvc3JjL29yZy9hcmdvdW1sL21vZGVsL21kci9Nb2RlbE1hbmFnZW1lbnRG YWN0b3J5TURSSW1wbC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLW1vZGVsLW1kci9z cmMvb3JnL2FyZ291bWwvbW9kZWwvbWRyL01vZGVsTWFuYWdlbWVudEhlbHBlck1EUkltcGwuamF2 YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS1tb2RlbC1tZHIvc3JjL29yZy9hcmdvdW1sL21v ZGVsL21kci9TdGF0ZU1hY2hpbmVzRmFjdG9yeU1EUkltcGwuamF2YQ0KICAgdHJ1bmsvc3JjL2Fy Z291bWwtY29yZS1tb2RlbC1tZHIvc3JjL29yZy9hcmdvdW1sL21vZGVsL21kci9VbWxGYWN0b3J5 TURSSW1wbC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLW1vZGVsLW1kci9zcmMvb3Jn L2FyZ291bWwvbW9kZWwvbWRyL1htaUhlYWRlclByb3ZpZGVySW1wbC5qYXZhDQogICB0cnVuay9z cmMvYXJnb3VtbC1jb3JlLW1vZGVsLW1kci9zcmMvb3JnL2FyZ291bWwvbW9kZWwvbWRyL1htaVJl YWRlckltcGwuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS1tb2RlbC1tZHIvc3JjL29y Zy9hcmdvdW1sL21vZGVsL21kci9YbWlSZWZlcmVuY2VSZXNvbHZlckltcGwuamF2YQ0KICAgdHJ1 bmsvc3JjL2FyZ291bWwtY29yZS1tb2RlbC1tZHIvc3JjL29yZy9hcmdvdW1sL21vZGVsL21kci9Y bWlXcml0ZXJNRFJJbXBsLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtbW9kZWwtbWRy L3Rlc3RzL29yZy9hcmdvdW1sL21vZGVsL21kci9BYnN0cmFjdE1EUk1vZGVsSW1wbGVtZW50YXRp b25UZXN0Q2FzZS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLW1vZGVsLW1kci90ZXN0 cy9vcmcvYXJnb3VtbC9tb2RlbC9tZHIvVGVzdFJlYWRDb21wcmVzc2VkRmlsZXNBbmRIcmVmLmph dmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtbW9kZWwvYnVpbGQueG1sDQogICB0cnVuay9z cmMvYXJnb3VtbC1jb3JlLW1vZGVsL3BvbS54bWwNCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUt bW9kZWwvc3JjL29yZy9hcmdvdW1sL21vZGVsL1VtbENoYW5nZUV2ZW50LmphdmENCiAgIHRydW5r L3NyYy9hcmdvdW1sLWNvcmUtbm90YXRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYNCiAgIHRydW5r L3NyYy9hcmdvdW1sLWNvcmUtbm90YXRpb24vYnVpbGQueG1sDQogICB0cnVuay9zcmMvYXJnb3Vt bC1jb3JlLW5vdGF0aW9uL3BvbS54bWwNCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtbm90YXRp b24vc3JjL29yZy9hcmdvdW1sL25vdGF0aW9uMi9Ob3RhdGlvbk1vZHVsZS5qYXZhDQogICB0cnVu ay9zcmMvYXJnb3VtbC1jb3JlLXRyYW5zZm9ybWVyL01FVEEtSU5GL01BTklGRVNULk1GDQogICB0 cnVuay9zcmMvYXJnb3VtbC1jb3JlLXRyYW5zZm9ybWVyL2J1aWxkLnhtbA0KICAgdHJ1bmsvc3Jj L2FyZ291bWwtY29yZS10cmFuc2Zvcm1lci9zcmMvb3JnL2FyZ291bWwvdHJhbnNmb3JtZXIvU2lt cGxlU3RhdGVUcmFuc2Zvcm1lci5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLXRyYW5z Zm9ybWVyL3NyYy9vcmcvYXJnb3VtbC90cmFuc2Zvcm1lci9UcmFuc2Zvcm1lck1vZHVsZS5qYXZh DQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLXVtbHByb3BlcnR5cGFuZWxzL01FVEEtSU5GL01B TklGRVNULk1GDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLXVtbHByb3BlcnR5cGFuZWxzL2J1 aWxkLnhtbA0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS11bWxwcm9wZXJ0eXBhbmVscy9wb20u eG1sDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLXVtbHByb3BlcnR5cGFuZWxzL3NyYy9vcmcv YXJnb3VtbC9jb3JlL3Byb3BlcnR5cGFuZWxzL21vZGVsL0dldHRlclNldHRlck1hbmFnZXIuamF2 YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS11bWxwcm9wZXJ0eXBhbmVscy9zcmMvb3JnL2Fy Z291bWwvY29yZS9wcm9wZXJ0eXBhbmVscy9tb2RlbC9HZXR0ZXJTZXR0ZXJNYW5hZ2VySW1wbC5q YXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLXVtbHByb3BlcnR5cGFuZWxzL3NyYy9vcmcv YXJnb3VtbC9jb3JlL3Byb3BlcnR5cGFuZWxzL21vZGVsL01ldGFEYXRhQ2FjaGUuamF2YQ0KICAg dHJ1bmsvc3JjL2FyZ291bWwtY29yZS11bWxwcm9wZXJ0eXBhbmVscy9zcmMvb3JnL2FyZ291bWwv Y29yZS9wcm9wZXJ0eXBhbmVscy9tb2R1bGUvWG1sUHJvcGVydHlQYW5lbHNNb2R1bGUuamF2YQ0K ICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS11bWxwcm9wZXJ0eXBhbmVscy9zcmMvb3JnL2FyZ291 bWwvY29yZS9wcm9wZXJ0eXBhbmVscy91aS9BYnN0cmFjdEFjdGlvbkFkZE1vZGVsRWxlbWVudC5q YXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLXVtbHByb3BlcnR5cGFuZWxzL3NyYy9vcmcv YXJnb3VtbC9jb3JlL3Byb3BlcnR5cGFuZWxzL3VpL0V4cHJlc3Npb25Cb2R5RmllbGQuamF2YQ0K ICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS11bWxwcm9wZXJ0eXBhbmVscy9zcmMvb3JnL2FyZ291 bWwvY29yZS9wcm9wZXJ0eXBhbmVscy91aS9FeHByZXNzaW9uTW9kZWwuamF2YQ0KICAgdHJ1bmsv c3JjL2FyZ291bWwtY29yZS11bWxwcm9wZXJ0eXBhbmVscy9zcmMvb3JnL2FyZ291bWwvY29yZS9w cm9wZXJ0eXBhbmVscy91aS9MYWJlbGxlZENvbXBvbmVudC5qYXZhDQogICB0cnVuay9zcmMvYXJn b3VtbC1jb3JlLXVtbHByb3BlcnR5cGFuZWxzL3NyYy9vcmcvYXJnb3VtbC9jb3JlL3Byb3BlcnR5 cGFuZWxzL3VpL1JhZGlvQnV0dG9uUGFuZWwuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29y ZS11bWxwcm9wZXJ0eXBhbmVscy9zcmMvb3JnL2FyZ291bWwvY29yZS9wcm9wZXJ0eXBhbmVscy91 aS9Sb3dTZWxlY3Rvci5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLXVtbHByb3BlcnR5 cGFuZWxzL3NyYy9vcmcvYXJnb3VtbC9jb3JlL3Byb3BlcnR5cGFuZWxzL3VpL1NpbXBsZUxpc3RN b2RlbC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLXVtbHByb3BlcnR5cGFuZWxzL3Ny Yy9vcmcvYXJnb3VtbC9jb3JlL3Byb3BlcnR5cGFuZWxzL3VpL1N3aW5nVUlGYWN0b3J5LmphdmEN CiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtdW1scHJvcGVydHlwYW5lbHMvc3JjL29yZy9hcmdv dW1sL2NvcmUvcHJvcGVydHlwYW5lbHMvdWkvVU1MQ2FsbEFjdGlvbk9wZXJhdGlvbkNvbWJvQm94 TW9kZWwuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS11bWxwcm9wZXJ0eXBhbmVscy9z cmMvb3JnL2FyZ291bWwvY29yZS9wcm9wZXJ0eXBhbmVscy91aS9VTUxDaGFuZ2VFeHByZXNzaW9u TW9kZWwuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS11bWxwcm9wZXJ0eXBhbmVscy9z cmMvb3JnL2FyZ291bWwvY29yZS9wcm9wZXJ0eXBhbmVscy91aS9VTUxDb21ib0JveE1vZGVsLmph dmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtdW1scHJvcGVydHlwYW5lbHMvc3JjL29yZy9h cmdvdW1sL2NvcmUvcHJvcGVydHlwYW5lbHMvdWkvVU1MQ29tcG9uZW50SW5zdGFuY2VDbGFzc2lm aWVyQ29tYm9Cb3hNb2RlbC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLXVtbHByb3Bl cnR5cGFuZWxzL3NyYy9vcmcvYXJnb3VtbC9jb3JlL3Byb3BlcnR5cGFuZWxzL3VpL1VNTENvbmRp dGlvbkV4cHJlc3Npb25Nb2RlbC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLXVtbHBy b3BlcnR5cGFuZWxzL3NyYy9vcmcvYXJnb3VtbC9jb3JlL3Byb3BlcnR5cGFuZWxzL3VpL1VNTEV4 cHJlc3Npb25Cb2R5RmllbGQuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS11bWxwcm9w ZXJ0eXBhbmVscy9zcmMvb3JnL2FyZ291bWwvY29yZS9wcm9wZXJ0eXBhbmVscy91aS9VTUxFeHBy ZXNzaW9uTW9kZWwuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS11bWxwcm9wZXJ0eXBh bmVscy9zcmMvb3JnL2FyZ291bWwvY29yZS9wcm9wZXJ0eXBhbmVscy91aS9VTUxFeHByZXNzaW9u UGFuZWwuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS11bWxwcm9wZXJ0eXBhbmVscy9z cmMvb3JnL2FyZ291bWwvY29yZS9wcm9wZXJ0eXBhbmVscy91aS9VTUxHZW5lcmFsaXphdGlvblBv d2VydHlwZUNvbWJvQm94TW9kZWwuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS11bWxw cm9wZXJ0eXBhbmVscy9zcmMvb3JnL2FyZ291bWwvY29yZS9wcm9wZXJ0eXBhbmVscy91aS9VTUxM aW5rZWRMaXN0LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtdW1scHJvcGVydHlwYW5l bHMvc3JjL29yZy9hcmdvdW1sL2NvcmUvcHJvcGVydHlwYW5lbHMvdWkvVU1MTW9kZWxFbGVtZW50 TGlzdE1vZGVsLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtdW1scHJvcGVydHlwYW5l bHMvc3JjL29yZy9hcmdvdW1sL2NvcmUvcHJvcGVydHlwYW5lbHMvdWkvVU1MTW9kZWxFbGVtZW50 TmFtZXNwYWNlQ29tYm9Cb3hNb2RlbC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLXVt bHByb3BlcnR5cGFuZWxzL3NyYy9vcmcvYXJnb3VtbC9jb3JlL3Byb3BlcnR5cGFuZWxzL3VpL1VN TE11dGFibGVMaW5rZWRMaXN0LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtdW1scHJv cGVydHlwYW5lbHMvc3JjL29yZy9hcmdvdW1sL2NvcmUvcHJvcGVydHlwYW5lbHMvdWkvVU1MUGxh aW5UZXh0RG9jdW1lbnQuamF2YQ0KICAgdHJ1bmsvc3JjL2FyZ291bWwtY29yZS11bWxwcm9wZXJ0 eXBhbmVscy9zcmMvb3JnL2FyZ291bWwvY29yZS9wcm9wZXJ0eXBhbmVscy91aS9VTUxSZWN1cnJl bmNlRXhwcmVzc2lvbk1vZGVsLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtdW1scHJv cGVydHlwYW5lbHMvc3JjL29yZy9hcmdvdW1sL2NvcmUvcHJvcGVydHlwYW5lbHMvdWkvVU1MU3R1 YlN0YXRlQ29tYm9Cb3hNb2RlbC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLXVtbHBy b3BlcnR5cGFuZWxzL3NyYy9vcmcvYXJnb3VtbC9jb3JlL3Byb3BlcnR5cGFuZWxzL3VpL1VNTFN5 bmNoU3RhdGVCb3VuZERvY3VtZW50LmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtdW1s cHJvcGVydHlwYW5lbHMvc3JjL29yZy9hcmdvdW1sL2NvcmUvcHJvcGVydHlwYW5lbHMvdWkvVU1M VGVtcGxhdGVQYXJhbWV0ZXJQYXJhbWV0ZXJDb21ib0JveE1vZGVsLmphdmENCiAgIHRydW5rL3Ny Yy9hcmdvdW1sLWNvcmUtdW1scHJvcGVydHlwYW5lbHMvc3JjL29yZy9hcmdvdW1sL2NvcmUvcHJv cGVydHlwYW5lbHMvdWkvVU1MVGltZUV4cHJlc3Npb25Nb2RlbC5qYXZhDQogICB0cnVuay9zcmMv YXJnb3VtbC1jb3JlLXVtbHByb3BlcnR5cGFuZWxzL3NyYy9vcmcvYXJnb3VtbC9jb3JlL3Byb3Bl cnR5cGFuZWxzL3VpL1VNTFZhbHVlU3BlY2lmaWNhdGlvbk1vZGVsLmphdmENCiAgIHRydW5rL3Ny Yy9hcmdvdW1sLWNvcmUtdW1scHJvcGVydHlwYW5lbHMvc3JjL29yZy9hcmdvdW1sL2NvcmUvcHJv cGVydHlwYW5lbHMvdWkvVU1MVmFsdWVTcGVjaWZpY2F0aW9uUGFuZWwuamF2YQ0KICAgdHJ1bmsv c3JjL2FyZ291bWwtY29yZS11bWxwcm9wZXJ0eXBhbmVscy9zcmMvb3JnL2FyZ291bWwvY29yZS9w cm9wZXJ0eXBhbmVscy91aS9VTUxWYWx1ZVNwZWNpZmljYXRpb25QYW5lbE9wdGlvbmFsLmphdmEN CiAgIHRydW5rL3NyYy9hcmdvdW1sLWNvcmUtdW1scHJvcGVydHlwYW5lbHMvc3JjL29yZy9hcmdv dW1sL2NvcmUvcHJvcGVydHlwYW5lbHMvdWkvVU1MVmFsdWVTcGVjaWZpY2F0aW9uVmFsdWVGaWVs ZC5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3JlLXVtbHByb3BlcnR5cGFuZWxzL3NyYy9v cmcvYXJnb3VtbC9jb3JlL3Byb3BlcnR5cGFuZWxzL3VpL1VNTFZhbHVlU3BlY2lmaWNhdGlvblZh bHVlRmllbGRPcGFxdWVFeHByZXNzaW9uRGlhbG9nLmphdmENCiAgIHRydW5rL3NyYy9hcmdvdW1s LWNvcmUtdW1scHJvcGVydHlwYW5lbHMvc3JjL29yZy9hcmdvdW1sL2NvcmUvcHJvcGVydHlwYW5l bHMvdWkvWE1MUHJvcFBhbmVsRmFjdG9yeS5qYXZhDQogICB0cnVuay9zcmMvYXJnb3VtbC1jb3Jl LXVtbHByb3BlcnR5cGFuZWxzL3NyYy9vcmcvYXJnb3VtbC9jb3JlL3Byb3BlcnR5cGFuZWxzL3Vp L1htbFByb3BlcnR5UGFuZWwuamF2YQ0KICAgdHJ1bmsvdG9vbHMvbWF2ZW4vcGFyZW50cG9tLnht bA0KDQpMb2c6DQpSZXBsYWNlZCBsb2c0aiB3aXRoIGphdmEubG9nZ2luZy4NCg0KQWxzbyBzb21l IHN0eWxlIGZpeGVzLg0KDQpDb250cmlidXRlZC1ieTogUnVzaSBQb3BvdiAod2l0aCBzdHlsZSBm aXhlcyBieSBMaW51cyBUb2xrZSkuDQpDaGFuZ2UtSWQ6IEk3ZDE0NjNkMTA3MzQwYWM3YjdlZjVm YzEwMWVlZjkzY2Y5NjA1ZGFlDQoNCk1vZGlmaWVkOiB0cnVuay9wb20ueG1sDQpVcmw6IGh0dHA6 Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5rL3BvbS54bWw/ dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KLS0tIHRydW5rL3BvbS54bWwJKG9yaWdpbmFsKQ0KKysrIHRydW5rL3BvbS54bWwJ MjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMTEsNyArMTEsNyBAQA0KICAgPHBhcmVudD4N CiAgICAgPGdyb3VwSWQ+b3JnLmFyZ291bWw8L2dyb3VwSWQ+DQogICAgIDxhcnRpZmFjdElkPnBh cmVudHBvbTwvYXJ0aWZhY3RJZD4NCi0gICAgPHZlcnNpb24+MC4zNS4zPC92ZXJzaW9uPg0KKyAg ICA8dmVyc2lvbj4wLjM1LjQ8L3ZlcnNpb24+DQogICAgIDxyZWxhdGl2ZVBhdGg+dG9vbHMvbWF2 ZW4vcGFyZW50cG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KICAgPC9wYXJlbnQ+DQogDQoNCk1vZGlm aWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYNClVybDogaHR0 cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2Fy Z291bWwtYXBwL01FVEEtSU5GL01BTklGRVNULk1GP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIx PTE5OTA2JnIyPTE5OTA3DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJn b3VtbC1hcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYJKG9yaWdpbmFsKQ0KKysrIHRydW5rL3NyYy9h cmdvdW1sLWFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRgkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDAN CkBAIC0xMzUsOCArMTM1LDcgQEANCiAgdHVkcmVzZGVuLm9jbC5wYXJzZXIubGV4ZXIsDQogIHR1 ZHJlc2Rlbi5vY2wucGFyc2VyLm5vZGUsDQogIHR1ZHJlc2Rlbi5vY2wucGFyc2VyLnBhcnNlcg0K LVJlcXVpcmUtQnVuZGxlOiBvcmcuYXJnb3VtbC5jb3JlLmluZnJhLA0KLSBvcmcuYXJnb3VtbC5j b3JlLm1vZGVsDQorUmVxdWlyZS1CdW5kbGU6IG9yZy5hcmdvdW1sLmNvcmUubW9kZWwNCiBFY2xp cHNlLVJlZ2lzdGVyQnVkZHk6IG9yZy5hcmdvdW1sLmNvcmUuaW5mcmENCiBFY2xpcHNlLUJ1ZGR5 UG9saWN5OiByZWdpc3RlcmVkDQogQnVuZGxlLUNsYXNzUGF0aDogbGliL2NvbW1vbnMtbG9nZ2lu Zy0xLjAuMi5qYXIsDQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvYnVpbGQueG1s DQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3Ry dW5rL3NyYy9hcmdvdW1sLWFwcC9idWlsZC54bWw/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9 MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdv dW1sLWFwcC9idWlsZC54bWwJKG9yaWdpbmFsKQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9i dWlsZC54bWwJMjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMTAsNyArMTAsNiBAQA0KICAg ICAgIFVzZWQgZm9yIGdlbmVyYXRpbmcgY29kZS4NCiANCiBCdWlsZGluZyB0aGlzIHJlcXVpcmVz Og0KLSAgICBpbmZyYQ0KICAgICBtb2RlbA0KIA0KICAgLS0+DQpAQCAtNjQsOSArNjMsNiBAQA0K ICAgICAgIDxmaWxlc2V0IGRpcj0ibGliIj4NCiAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFy Ii8+DQogICAgICAgPC9maWxlc2V0Pg0KLSAgICAgIDxmaWxlc2V0IGRpcj0iLi4vYXJnb3VtbC1j b3JlLWluZnJhL2J1aWxkLyI+DQotICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPg0KLSAg ICAgIDwvZmlsZXNldD4NCiAgICAgICA8ZmlsZXNldCBkaXI9Ii4uL2FyZ291bWwtY29yZS1tb2Rl bC9idWlsZC8iPg0KICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4NCiAgICAgICA8L2Zp bGVzZXQ+DQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvcG9tLnhtbA0KVXJsOiBo dHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9zcmMv YXJnb3VtbC1hcHAvcG9tLnhtbD92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0x OTkwNw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3Bv bS54bWwJKG9yaWdpbmFsKQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9wb20ueG1sCTIwMTIt MTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTkyLDE0ICs5Miw2IEBADQogICAgICAgPHNjb3BlPmNv bXBpbGU8L3Njb3BlPg0KICAgICA8L2RlcGVuZGVuY3k+DQogDQotICAgIDxkZXBlbmRlbmN5Pg0K LSAgICAgIDxncm91cElkPmxvZzRqPC9ncm91cElkPg0KLSAgICAgIDxhcnRpZmFjdElkPmxvZzRq PC9hcnRpZmFjdElkPg0KLSAgICAgIDx2ZXJzaW9uPjEuMi42LTY8L3ZlcnNpb24+DQotICAgICAg PHR5cGU+amFyPC90eXBlPg0KLSAgICAgIDxzY29wZT5jb21waWxlPC9zY29wZT4NCi0gICAgPC9k ZXBlbmRlbmN5Pg0KLQ0KICAgICA8IS0tIE1EUiB0aGluZ3MgLS0+DQogICAgIDxkZXBlbmRlbmN5 Pg0KICAgICAgIDxncm91cElkPm9yZy5hcmdvdW1sPC9ncm91cElkPg0KDQpNb2RpZmllZDogdHJ1 bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9hcHBsaWNhdGlvbi9NYWluLmphdmEN ClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1 bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9hcHBsaWNhdGlvbi9NYWluLmphdmE/ dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvYXBwbGlj YXRpb24vTWFpbi5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3Jj L29yZy9hcmdvdW1sL2FwcGxpY2F0aW9uL01haW4uamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4 MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0K LSAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KKyAq IENvcHlyaWdodCAoYykgMjAwOS0yMDEyIENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KICAqIEFs bCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRl cmlhbHMNCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xp cHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3Ry aWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KQEAgLTQ1LDE0ICs0NSwxMyBAQA0KIGltcG9y dCBqYXZhLmF3dC5HcmFwaGljc0Vudmlyb25tZW50Ow0KIGltcG9ydCBqYXZhLmF3dC5SZWN0YW5n bGU7DQogaW1wb3J0IGphdmEuaW8uRmlsZTsNCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsN Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCiBpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJl c3M7DQogaW1wb3J0IGphdmEubmV0LlVua25vd25Ib3N0RXhjZXB0aW9uOw0KIGltcG9ydCBqYXZh LnV0aWwuQXJyYXlMaXN0Ow0KIGltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247DQogaW1wb3J0 IGphdmEudXRpbC5MaXN0Ow0KLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsNCitpbXBvcnQg amF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dl cjsNCiANCiBpbXBvcnQgamF2YXguc3dpbmcuSk9wdGlvblBhbmU7DQogaW1wb3J0IGphdmF4LnN3 aW5nLkpQYW5lbDsNCkBAIC02MCwxMCArNTksNiBAQA0KIGltcG9ydCBqYXZheC5zd2luZy5VSURl ZmF1bHRzOw0KIGltcG9ydCBqYXZheC5zd2luZy5VSU1hbmFnZXI7DQogDQotaW1wb3J0IG9yZy5h cGFjaGUubG9nNGouQmFzaWNDb25maWd1cmF0b3I7DQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGou TGV2ZWw7DQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KLWltcG9ydCBvcmcuYXBh Y2hlLmxvZzRqLlByb3BlcnR5Q29uZmlndXJhdG9yOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5hcHBs aWNhdGlvbi5hcGkuQXJnbzsNCiBpbXBvcnQgb3JnLmFyZ291bWwuYXBwbGljYXRpb24uYXBpLkNv bW1hbmRMaW5lSW50ZXJmYWNlOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5hcHBsaWNhdGlvbi5zZWN1 cml0eS5BcmdvQXd0RXhjZXB0aW9uSGFuZGxlcjsNCkBAIC0xNTUsNyArMTUwLDcgQEANCiAgICAg ICovDQogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsNCiAgICAg ICAgIHRyeSB7DQotICAgICAgICAgICAgTE9HLmluZm8oIkFyZ29VTUwgU3RhcnRlZC4iKTsNCisg ICAgICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJBcmdvVU1MIFN0YXJ0ZWQuIik7DQogDQog ICAgICAgICAgICAgU2ltcGxlVGltZXIgc3QgPSBuZXcgU2ltcGxlVGltZXIoKTsNCiAgICAgICAg ICAgICBzdC5tYXJrKCJiZWdpbiIpOw0KQEAgLTI0MywyMCArMjM4LDE4IEBADQogICAgICAgICAg ICAgVGhyZWFkIHBvc3RMb2FkVGhlYWQgPSBuZXcgVGhyZWFkKHBsKTsNCiAgICAgICAgICAgICBw b3N0TG9hZFRoZWFkLnN0YXJ0KCk7DQogDQotICAgICAgICAgICAgTE9HLmluZm8oIiIpOw0KLSAg ICAgICAgICAgIExPRy5pbmZvKCJwcm9maWxlIG9mIGxvYWQgdGltZSAjIyMjIyMjIyMjIyMiKTsN CisgICAgICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJcbnByb2ZpbGUgb2YgbG9hZCB0aW1l ICMjIyMjIyMjIyMjIyIpOw0KICAgICAgICAgICAgIGZvciAoRW51bWVyYXRpb24gaSA9IHN0LnJl c3VsdCgpOyBpLmhhc01vcmVFbGVtZW50cygpOykgew0KLSAgICAgICAgICAgICAgICBMT0cuaW5m byhpLm5leHRFbGVtZW50KCkpOw0KKyAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLklORk8s ICJ7MH0iLCBpLm5leHRFbGVtZW50KCkpOw0KICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBM T0cuaW5mbygiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7DQotICAgICAgICAg ICAgTE9HLmluZm8oIiIpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywgIiMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIik7DQogDQogICAgICAgICAgICAgc3QgPSBu dWxsOw0KICAgICAgICAgICAgIEFyZ29GcmFtZS5nZXRGcmFtZSgpLnNldEN1cnNvcigNCiAgICAg ICAgICAgICAgICAgICAgIEN1cnNvci5nZXRQcmVkZWZpbmVkQ3Vyc29yKEN1cnNvci5ERUZBVUxU X0NVUlNPUikpOw0KIA0KICAgICAgICAgICAgIC8vIEFuZHJlYXM6IGp1c3QgdGVtcG9yYXJ5OiBh IHdhcm5pbmcgZGlhbG9nIGZvciB1bWwyLi4uDQotICAgICAgICAgICAgaWYgKHNob3dVbWwyd2Fy bmluZyANCisgICAgICAgICAgICBpZiAoc2hvd1VtbDJ3YXJuaW5nDQogICAgICAgICAgICAgICAg ICAgICAmJiBNb2RlbC5nZXRGYWNhZGUoKS5nZXRVbWxWZXJzaW9uKCkuc3RhcnRzV2l0aCgiMiIp KSB7DQogICAgICAgICAgICAgICAgIEpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKCBBcmdv RnJhbWUuZ2V0RnJhbWUoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICwgIllvdSBhcmUgcnVu bmluZyBhbiBleHBlcmltZW50YWwgdmVyc2lvbiAiDQpAQCAtMjcwLDEyICsyNjMsOCBAQA0KICAg ICAgICAgICAgIFRvb2xUaXBNYW5hZ2VyLnNoYXJlZEluc3RhbmNlKCkuc2V0RGlzbWlzc0RlbGF5 KDUwMDAwMDAwKTsNCiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7DQogICAgICAgICAg ICAgdHJ5IHsNCi0gICAgICAgICAgICAgICAgTE9HLmZhdGFsKCJGYXRhbCBlcnJvciBvbiBzdGFy dHVwLiAgQXJnb1VNTCBmYWlsZWQgdG8gc3RhcnQiLCANCi0gICAgICAgICAgICAgICAgICAgICAg ICB0KTsNCisgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsICJGYXRhbCBlcnJv ciBvbiBzdGFydHVwLiAgQXJnb1VNTCBmYWlsZWQgdG8gc3RhcnQiLCB0KTsNCiAgICAgICAgICAg ICB9IGZpbmFsbHkgew0KLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhdGFs IGVycm9yIG9uIHN0YXJ0dXAuICAiDQotICAgICAgICAgICAgICAgICAgICAgICAgKyAiQXJnb1VN TCBmYWlsZWQgdG8gc3RhcnQuIik7DQotICAgICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNl KCk7DQogICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOw0KICAgICAgICAgICAgIH0NCiAg ICAgICAgIH0NCkBAIC0zMzgsNyArMzI3LDcgQEANCiAgICAgICogUGFyc2UgY29tbWFuZCBsaW5l IGFyZ3MuIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgYWxsIG9wdGlvbnMgcHJlY2VkZSB0aGUNCiAg ICAgICogbmFtZSBvZiBhIHByb2plY3QgZmlsZSB0byBsb2FkLiBTZXRzIHN0YXRpYyBmaWVsZHMg dGhhdCBjYW4gYmUgcmVmZXJlbmNlZA0KICAgICAgKiBsYXRlci4NCi0gICAgICogDQorICAgICAq DQogICAgICAqIEBwYXJhbSBhcmdzIGNvbW1hbmQgbGluZSBhcmdzDQogICAgICAqLw0KICAgICBw cml2YXRlIHN0YXRpYyB2b2lkIHBhcnNlQ29tbWFuZExpbmUoU3RyaW5nW10gYXJncykgew0KQEAg LTM3NSwxNCArMzY0LDE0IEBADQogICAgICAgICAgICAgICAgICAgICBpKys7DQogICAgICAgICAg ICAgICAgIH0gZWxzZSBpZiAoYXJnc1tpXS5lcXVhbHNJZ25vcmVDYXNlKCItYmF0Y2giKSkgew0K ICAgICAgICAgICAgICAgICAgICAgYmF0Y2ggPSB0cnVlOw0KLSAgICAgICAgICAgICAgICB9IGVs c2UgaWYgKGFyZ3NbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLW9wZW4iKSANCisgICAgICAgICAgICAg ICAgfSBlbHNlIGlmIChhcmdzW2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1vcGVuIikNCiAgICAgICAg ICAgICAgICAgICAgICAgICAmJiBpICsgMSA8IGFyZ3MubGVuZ3RoKSB7DQogICAgICAgICAgICAg ICAgICAgICBwcm9qZWN0TmFtZSA9IGFyZ3NbKytpXTsNCi0gICAgICAgICAgICAgICAgfSBlbHNl IGlmIChhcmdzW2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1wcmludCIpIA0KKyAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKGFyZ3NbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXByaW50IikNCiAgICAgICAg ICAgICAgICAgICAgICAgICAmJiBpICsgMSA8IGFyZ3MubGVuZ3RoKSB7DQogICAgICAgICAgICAg ICAgICAgICAvLyBUT0RPOiBIdWdlIHNpZGUgZWZmZWN0LiAgSG9pc3Qgb3V0IG9mIHBhcnNlIC0g dGZtDQogICAgICAgICAgICAgICAgICAgICAvLyBsZXQncyBsb2FkIHRoZSBwcm9qZWN0DQotICAg ICAgICAgICAgICAgICAgICBTdHJpbmcgcHJvamVjdFRvQmVQcmludGVkID0gDQorICAgICAgICAg ICAgICAgICAgICBTdHJpbmcgcHJvamVjdFRvQmVQcmludGVkID0NCiAgICAgICAgICAgICAgICAg ICAgICAgICBQZXJzaXN0ZW5jZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5maXhFeHRlbnNpb24oDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWysraV0pOw0KICAgICAgICAgICAg ICAgICAgICAgUHJvamVjdEJyb3dzZXIuZ2V0SW5zdGFuY2UoKS5sb2FkUHJvamVjdCgNCkBAIC00 NjYsNyArNDU1LDcgQEANCiAgICAgICAgICAgICAgICAgREVGQVVMVF9NT0RFTF9JTVBMRU1FTlRB VElPTik7DQogICAgICAgICBUaHJvd2FibGUgcmV0ID0gTW9kZWwuaW5pdGlhbGlzZShjbGFzc05h bWUpOw0KICAgICAgICAgaWYgKHJldCAhPSBudWxsKSB7DQotICAgICAgICAgICAgTE9HLmZhdGFs KCJNb2RlbCBjb21wb25lbnQgbm90IGNvcnJlY3RseSBpbml0aWFsaXplZC4iLCByZXQpOw0KKyAg ICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiTW9kZWwgY29tcG9uZW50IG5vdCBjb3Jy ZWN0bHkgaW5pdGlhbGl6ZWQuIiwgcmV0KTsNCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50 bG4oY2xhc3NOYW1lDQogICAgICAgICAgICAgICAgICAgICArICIgaXMgbm90IGEgd29ya2luZyBN b2RlbCBpbXBsZW1lbnRhdGlvbi4iKTsNCiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsNCkBA IC01MjMsMTEgKzUxMiwxMCBAQA0KICAgICAgICAgaWYgKCEoIiIuZXF1YWxzKHMpKSkgew0KICAg ICAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKHMpOw0KICAgICAgICAgICAgIGlmIChmaWxl LmV4aXN0cygpKSB7DQotICAgICAgICAgICAgICAgIExPRy5pbmZvKCJSZS1vcGVuaW5nIHByb2pl Y3QgIiArIHMpOw0KKyAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJSZS1vcGVu aW5nIHByb2plY3QgezB9Iiwgcyk7DQogICAgICAgICAgICAgICAgIHJldHVybiBzOw0KICAgICAg ICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIExPRy53YXJuKCJDYW5ub3QgcmUtb3Bl biAiICsgcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiBiZWNhdXNlIGl0IGRvZXMgbm90 IGV4aXN0Iik7DQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuV0FSTklORywgIkNhbm5v dCByZS1vcGVuIHswfSBiZWNhdXNlIGl0IGRvZXMgbm90IGV4aXN0Iiwgcyk7DQogICAgICAgICAg ICAgfQ0KICAgICAgICAgfQ0KICAgICAgICAgcmV0dXJuIG51bGw7DQpAQCAtNzE0LDEyICs3MDIs MTIgQEANCiAgICAgfQ0KIA0KICAgICAvKioNCi0gICAgICogQ3JlYXRlIHRoZSAuYXJnb3VtbCBk aXJlY3RvcnkgaWYgaXQgZG9lc24ndCBleGlzdC4gDQotICAgICAqIFRoaXMgaXMgZG9uZSBoZXJl IGJlY2F1c2UgaXQgbXVzdCBiZSBkb25lIGJlZm9yZSANCisgICAgICogQ3JlYXRlIHRoZSAuYXJn b3VtbCBkaXJlY3RvcnkgaWYgaXQgZG9lc24ndCBleGlzdC4NCisgICAgICogVGhpcyBpcyBkb25l IGhlcmUgYmVjYXVzZSBpdCBtdXN0IGJlIGRvbmUgYmVmb3JlDQogICAgICAqIHNldHRpbmcgdGhl IGxvZyBjb25maWd1cmF0aW9uLg0KICAgICAgKi8NCiAgICAgc3RhdGljIHsNCi0gICAgICAgIEZp bGUgYXJnb0RpciA9IG5ldyBGaWxlKFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5ob21lIikgDQor ICAgICAgICBGaWxlIGFyZ29EaXIgPSBuZXcgRmlsZShTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIu aG9tZSIpDQogICAgICAgICAgICAgICAgICsgRmlsZS5zZXBhcmF0b3IgKyAiLmFyZ291bWwiKTsN CiAgICAgICAgIGlmICghYXJnb0Rpci5leGlzdHMoKSkgew0KICAgICAgICAgICAgIGFyZ29EaXIu bWtkaXIoKTsNCkBAIC03NDAsOSArNzI4LDkgQEANCiAgICAgICovDQogICAgIHN0YXRpYyB7DQog DQotICAgICAgICAvKiAgDQorICAgICAgICAvKg0KICAgICAgICAgICogSW5zdGFsbCB0aGUgdHJh cCB0byAiZWF0IiBTZWN1cml0eUV4Y2VwdGlvbnMuDQotICAgICAgICAgKiANCisgICAgICAgICAq DQogICAgICAgICAgKiBOT1RFOiBUaGlzIGlzIHRlbXBvcmFyeSBhbmQgd2lsbCBnbyBhd2F5IGlu IGEgImZ1dHVyZSIgcmVsZWFzZQ0KICAgICAgICAgICogaHR0cDovL2J1Z3Muc3VuLmNvbS9idWdk YXRhYmFzZS92aWV3X2J1Zy5kbz9idWdfaWQ9NDcxNDIzMg0KICAgICAgICAgICovDQpAQCAtNzYy LDM4ICs3NTAsMzggQEANCiAgICAgICAgICAqIHtAbGluayBBcmdvfSBwZXJmb3JtIHRoZSBpbml0 aWFsaXphdGlvbi4NCiAgICAgICAgICAqLw0KIA0KLSAgICAgICAgLy8gSmF2YVdlYlN0YXJ0IHBy b3BlcnRpZXMgZm9yIGxvZ3MgYXJlIDogDQorICAgICAgICAvLyBKYXZhV2ViU3RhcnQgcHJvcGVy dGllcyBmb3IgbG9ncyBhcmUgOg0KICAgICAgICAgLy8gZGVwbG95bWVudC51c2VyLmxvZ2RpciAm IGRlcGxveW1lbnQudXNlci50bXANCi0gICAgICAgIGlmIChTeXN0ZW0uZ2V0UHJvcGVydHkoImxv ZzRqLmNvbmZpZ3VyYXRpb24iKSA9PSBudWxsKSB7DQotICAgICAgICAgICAgUHJvcGVydGllcyBw cm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7DQotICAgICAgICAgICAgSW5wdXRTdHJlYW0gc3RyZWFt ID0gbnVsbDsNCi0gICAgICAgICAgICB0cnkgew0KLSAgICAgICAgICAgICAgICBzdHJlYW0gPSBU aHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpDQotICAgICAgICAg ICAgICAgICAgICAgICAgLmdldFJlc291cmNlQXNTdHJlYW0oREVGQVVMVF9MT0dHSU5HX0NPTkZJ R1VSQVRJT04pOw0KLQ0KLSAgICAgICAgICAgICAgICBpZiAoc3RyZWFtICE9IG51bGwpIHsNCi0g ICAgICAgICAgICAgICAgICAgIHByb3BzLmxvYWQoc3RyZWFtKTsNCi0gICAgICAgICAgICAgICAg fQ0KLSAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvKSB7DQotICAgICAgICAgICAg ICAgIGlvLnByaW50U3RhY2tUcmFjZSgpOw0KLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgt MSk7DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIFByb3BlcnR5Q29uZmlndXJhdG9y LmNvbmZpZ3VyZShwcm9wcyk7DQotDQotICAgICAgICAgICAgaWYgKHN0cmVhbSA9PSBudWxsKSB7 DQotICAgICAgICAgICAgICAgIEJhc2ljQ29uZmlndXJhdG9yLmNvbmZpZ3VyZSgpOw0KLSAgICAg ICAgICAgICAgICBMb2dnZXIuZ2V0Um9vdExvZ2dlcigpLmdldExvZ2dlclJlcG9zaXRvcnkoKS5z ZXRUaHJlc2hvbGQoDQotICAgICAgICAgICAgICAgICAgICAgICAgTGV2ZWwuRVJST1IpOyAvLyBk ZWZhdWx0IGxldmVsIGlzIERFQlVHDQotICAgICAgICAgICAgICAgIExvZ2dlci5nZXRSb290TG9n Z2VyKCkuZXJyb3IoDQotICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBmaW5kIHZh bGlkIGxvZzRqIHByb3BlcnRpZXMiDQotICAgICAgICAgICAgICAgICAgICAgICAgKyAiaW4gbG9n NGouY29uZmlndXJhdGlvbiINCi0gICAgICAgICAgICAgICAgICAgICAgICArICJ1c2luZyBkZWZh dWx0IGxvZ2dpbmcgY29uZmlndXJhdGlvbiIpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0N CisvLyAgICAgICAgaWYgKFN5c3RlbS5nZXRQcm9wZXJ0eSgibG9nNGouY29uZmlndXJhdGlvbiIp ID09IG51bGwpIHsNCisvLyAgICAgICAgICAgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVy dGllcygpOw0KKy8vICAgICAgICAgICAgSW5wdXRTdHJlYW0gc3RyZWFtID0gbnVsbDsNCisvLyAg ICAgICAgICAgIHRyeSB7DQorLy8gICAgICAgICAgICAgICAgc3RyZWFtID0gVGhyZWFkLmN1cnJl bnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKQ0KKy8vICAgICAgICAgICAgICAgICAg ICAgICAgLmdldFJlc291cmNlQXNTdHJlYW0oREVGQVVMVF9MT0dHSU5HX0NPTkZJR1VSQVRJT04p Ow0KKy8vDQorLy8gICAgICAgICAgICAgICAgaWYgKHN0cmVhbSAhPSBudWxsKSB7DQorLy8gICAg ICAgICAgICAgICAgICAgIHByb3BzLmxvYWQoc3RyZWFtKTsNCisvLyAgICAgICAgICAgICAgICB9 DQorLy8gICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpbykgew0KKy8vICAgICAgICAg ICAgICAgIGlvLnByaW50U3RhY2tUcmFjZSgpOw0KKy8vICAgICAgICAgICAgICAgIFN5c3RlbS5l eGl0KC0xKTsNCisvLyAgICAgICAgICAgIH0NCisvLw0KKy8vICAgICAgICAgICAgUHJvcGVydHlD b25maWd1cmF0b3IuY29uZmlndXJlKHByb3BzKTsNCisvLw0KKy8vICAgICAgICAgICAgaWYgKHN0 cmVhbSA9PSBudWxsKSB7DQorLy8gICAgICAgICAgICAgICAgQmFzaWNDb25maWd1cmF0b3IuY29u ZmlndXJlKCk7DQorLy8gICAgICAgICAgICAgICAgTG9nZ2VyLmdldFJvb3RMb2dnZXIoKS5nZXRM b2dnZXJSZXBvc2l0b3J5KCkuc2V0VGhyZXNob2xkKA0KKy8vICAgICAgICAgICAgICAgICAgICAg ICAgTGV2ZWwuRVJST1IpOyAvLyBkZWZhdWx0IGxldmVsIGlzIERFQlVHDQorLy8gICAgICAgICAg ICAgICAgTG9nZ2VyLmdldFJvb3RMb2dnZXIoKS5lcnJvcigNCisvLyAgICAgICAgICAgICAgICAg ICAgICAgICJGYWlsZWQgdG8gZmluZCB2YWxpZCBsb2c0aiBwcm9wZXJ0aWVzIg0KKy8vICAgICAg ICAgICAgICAgICAgICAgICAgKyAiaW4gbG9nNGouY29uZmlndXJhdGlvbiINCisvLyAgICAgICAg ICAgICAgICAgICAgICAgICsgInVzaW5nIGRlZmF1bHQgbG9nZ2luZyBjb25maWd1cmF0aW9uIik7 DQorLy8gICAgICAgICAgICB9DQorLy8gICAgICAgIH0NCiANCiAgICAgICAgIC8vIGluaXRMb2dn aW5nKCk7DQotICAgICAgICBMT0cgPSBMb2dnZXIuZ2V0TG9nZ2VyKE1haW4uY2xhc3MpOw0KKyAg ICAgICAgTE9HID0gTG9nZ2VyLmdldExvZ2dlcihNYWluLmNsYXNzLmdldE5hbWUoKSk7DQogICAg IH0NCiANCiANCkBAIC04NTgsNyArODQ2LDcgQEANCiAgICAgICAgIHBiLnNldExvY2F0aW9uKHgs IHkpOw0KICAgICAgICAgcGIuc2V0U2l6ZSh3LCBoKTsNCiAgICAgICAgIHBiLnNldEV4dGVuZGVk U3RhdGUoQ29uZmlndXJhdGlvbi5nZXRCb29sZWFuKA0KLSAgICAgICAgICAgICAgICBBcmdvLktF WV9TQ1JFRU5fTUFYSU1JWkVELCBmYWxzZSkgDQorICAgICAgICAgICAgICAgIEFyZ28uS0VZX1ND UkVFTl9NQVhJTUlaRUQsIGZhbHNlKQ0KICAgICAgICAgICAgICAgICA/IEZyYW1lLk1BWElNSVpF RF9CT1RIIDogRnJhbWUuTk9STUFMKTsNCiANCiAgICAgICAgIFVJTWFuYWdlci5wdXQoIkJ1dHRv bi5mb2N1c0lucHV0TWFwIiwgbmV3IFVJRGVmYXVsdHMuTGF6eUlucHV0TWFwKA0KQEAgLTg2OCwx OCArODU2LDE4IEBADQogICAgICAgICAgICAgICAgICAgICAiU1BBQ0UiLCAicHJlc3NlZCIsDQog ICAgICAgICAgICAgICAgICAgICAicmVsZWFzZWQgU1BBQ0UiLCAicmVsZWFzZWQiDQogICAgICAg ICAgICAgICAgIH0pDQotICAgICAgICApOyAgICAgICAgIA0KKyAgICAgICAgKTsNCiAgICAgICAg IHJldHVybiBwYjsNCiAgICAgfQ0KIA0KICAgICAvKioNCiAgICAgICogUHVibGlzaCB0aGUgdmVy c2lvbiBvZiB0aGUgQXJnb1VNTCBhcHBsaWNhdGlvbi4gPHA+DQotICAgICAqIA0KLSAgICAgKiBU aGlzIGZ1bmN0aW9uIGlzIGludGVudGlvbmFsbHkgcHVibGljLCANCi0gICAgICogc2luY2UgYXBw bGljYXRpb25zIGJ1aWx0IG9uIEFyZ29VTUwsIA0KLSAgICAgKiB0aGF0IGRvIG5vdCBtYWtlIHVz ZSBvZiBNYWluLm1haW4oKSwgDQotICAgICAqIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gYW5kIHRo ZW4gYWNjZXNzIEFyZ29VTUwncyB2ZXJzaW9uIA0KLSAgICAgKiBmcm9tIHRoZSBBcHBsaWNhdGlv blZlcnNpb24gY2xhc3MuIA0KKyAgICAgKg0KKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGludGVu dGlvbmFsbHkgcHVibGljLA0KKyAgICAgKiBzaW5jZSBhcHBsaWNhdGlvbnMgYnVpbHQgb24gQXJn b1VNTCwNCisgICAgICogdGhhdCBkbyBub3QgbWFrZSB1c2Ugb2YgTWFpbi5tYWluKCksDQorICAg ICAqIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gYW5kIHRoZW4gYWNjZXNzIEFyZ29VTUwncyB2ZXJz aW9uDQorICAgICAqIGZyb20gdGhlIEFwcGxpY2F0aW9uVmVyc2lvbiBjbGFzcy4NCiAgICAgICov DQogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBpbml0VmVyc2lvbigpIHsNCiAgICAgICAgIEFyZ29W ZXJzaW9uLmluaXQoKTsNCkBAIC04OTYsNyArODg0LDcgQEANCiAgICAgLyoqDQogICAgICAqIExv Z2dlci4NCiAgICAgICovDQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBM b2dnZXIuZ2V0TG9nZ2VyKFBvc3RMb2FkLmNsYXNzKTsNCisgICAgcHJpdmF0ZSBzdGF0aWMgZmlu YWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoUG9zdExvYWQuY2xhc3MuZ2V0TmFtZSgp KTsNCiANCiAgICAgLyoqDQogICAgICAqIFRoZSBsaXN0IG9mIGFjdGlvbnMgdG8gcGVyZm9ybS4N CkBAIC05MjAsMTQgKzkwOCwxNCBAQA0KICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICBUaHJl YWQuc2xlZXAoMTAwMCk7DQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsNCi0gICAg ICAgICAgICBMT0cuZXJyb3IoInBvc3QgbG9hZCBubyBzbGVlcCIsIGV4KTsNCisgICAgICAgICAg ICBMT0cubG9nKExldmVsLlNFVkVSRSwgInBvc3QgbG9hZCBubyBzbGVlcCIsIGV4KTsNCiAgICAg ICAgIH0NCiAgICAgICAgIGZvciAoUnVubmFibGUgciA6IHBvc3RMb2FkQWN0aW9ucykgew0KICAg ICAgICAgICAgIHIucnVuKCk7DQogICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAg VGhyZWFkLnNsZWVwKDEwMCk7DQogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7 DQotICAgICAgICAgICAgICAgIExPRy5lcnJvcigicG9zdCBsb2FkIG5vIHNsZWVwMiIsIGV4KTsN CisgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsICJwb3N0IGxvYWQgbm8gc2xl ZXAyIiwgZXgpOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgfQ0KQEAgLTk0MCw3 ICs5MjgsNyBAQA0KICAgICAvKioNCiAgICAgICogTG9nZ2VyLg0KICAgICAgKi8NCi0gICAgcHJp dmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoTG9hZE1vZHVs ZXMuY2xhc3MpOw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2Vy LmdldExvZ2dlcihMb2FkTW9kdWxlcy5jbGFzcy5nZXROYW1lKCkpOw0KIA0KIA0KICAgICBwcml2 YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBPUFRJT05BTF9JTlRFUk5BTF9NT0RVTEVTID0gew0K QEAgLTk1Nyw4ICs5NDUsOCBAQA0KICAgICAgICAgICAgICAgICBNb2R1bGVMb2FkZXIyLmFkZENs YXNzKG1vZHVsZSk7DQogICAgICAgICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlv biBlKSB7DQogICAgICAgICAgICAgICAgIC8qIFdlIGRvbid0IGNhcmUgaWYgb3B0aW9uYWwgbW9k dWxlcyBhcmVuJ3QgZm91bmQuICovDQotICAgICAgICAgICAgICAgIExPRy5kZWJ1ZygiTW9kdWxl ICIgKyBtb2R1bGUgKyAiIG5vdCBmb3VuZCIpOw0KLSAgICAgICAgICAgIH0gICAgICAgICAgICAN CisgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiTW9kdWxlIHswfSBub3QgZm91 bmQiLCBtb2R1bGUpOw0KKyAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgfQ0KIA0KQEAg LTk2Nyw3ICs5NTUsNyBAQA0KICAgICAgKi8NCiAgICAgcHVibGljIHZvaWQgcnVuKCkgew0KICAg ICAgICAgaHVudEZvckludGVybmFsTW9kdWxlcygpOw0KLSAgICAgICAgTE9HLmluZm8oIk1vZHVs ZSBsb2FkaW5nIGRvbmUiKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywgIk1vZHVsZSBs b2FkaW5nIGRvbmUiKTsNCiAgICAgfQ0KIA0KIH0gLyogZW5kIGNsYXNzIExvYWRNb2R1bGVzICov DQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2FwcGxp Y2F0aW9uL1N0YXJ0Q3JpdGljcy5qYXZhDQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcv c291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291 bWwvYXBwbGljYXRpb24vU3RhcnRDcml0aWNzLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcm cjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9h cmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvYXBwbGljYXRpb24vU3RhcnRDcml0aWNzLmphdmEJ KG9yaWdpbmFsKQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvYXBw bGljYXRpb24vU3RhcnRDcml0aWNzLmphdmEJMjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAt MSw2ICsxLDYgQEANCiAvKiAkSWQkDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5 cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChj KSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNl cnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFy ZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExp Y2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQg aXMgYXZhaWxhYmxlIGF0DQpAQCAtMzgsNyArMzgsOSBAQA0KIA0KIHBhY2thZ2Ugb3JnLmFyZ291 bWwuYXBwbGljYXRpb247DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KK2lt cG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcu TG9nZ2VyOw0KKw0KIGltcG9ydCBvcmcuYXJnb3VtbC5hcHBsaWNhdGlvbi5hcGkuQXJnbzsNCiBp bXBvcnQgb3JnLmFyZ291bWwuYXBwbGljYXRpb24uaGVscGVycy5SZXNvdXJjZUxvYWRlcldyYXBw ZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5EZXNpZ25lcjsNCkBAIC01OCw3ICs2 MCw4IEBADQogICAgIC8qKg0KICAgICAgKiBMb2dnZXIuDQogICAgICAqLw0KLSAgICBwcml2YXRl IHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyLmdldExvZ2dlcihTdGFydENyaXRpY3Mu Y2xhc3MpOw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCisgICAgICAg IExvZ2dlci5nZXRMb2dnZXIoU3RhcnRDcml0aWNzLmNsYXNzLmdldE5hbWUoKSk7DQogDQogICAg IC8qDQogICAgICAqIEBzZWUgamF2YS5sYW5nLlJ1bm5hYmxlI3J1bigpDQpAQCAtNzgsNyArODEs NyBAQA0KICAgICAgICAgZm9yIChPYmplY3QgbW9kZWwgOiBwLmdldFVzZXJEZWZpbmVkTW9kZWxM aXN0KCkpIHsNCiAgICAgICAgICAgICBNb2RlbC5nZXRQdW1wKCkuYWRkTW9kZWxFdmVudExpc3Rl bmVyKGRzZ3IsIG1vZGVsKTsNCiAgICAgICAgIH0NCi0gICAgICAgIExPRy5pbmZvKCJzcGF3bmVk IGNyaXRpcXVpbmcgdGhyZWFkIik7DQorICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJzcGF3 bmVkIGNyaXRpcXVpbmcgdGhyZWFkIik7DQogICAgICAgICBkc2dyLmdldERlY2lzaW9uTW9kZWwo KS5zdGFydENvbnNpZGVyaW5nKFVNTERlY2lzaW9uLkNMQVNTX1NFTEVDVElPTik7DQogICAgICAg ICBkc2dyLmdldERlY2lzaW9uTW9kZWwoKS5zdGFydENvbnNpZGVyaW5nKFVNTERlY2lzaW9uLkJF SEFWSU9SKTsNCiAgICAgICAgIGRzZ3IuZ2V0RGVjaXNpb25Nb2RlbCgpLnN0YXJ0Q29uc2lkZXJp bmcoVU1MRGVjaXNpb24uTkFNSU5HKTsNCkBAIC0xMDAsNCArMTAzLDMgQEANCiAgICAgfQ0KIA0K IH0gLyogZW5kIGNsYXNzIFN0YXJ0Q3JpdGljcyAqLw0KLQ0KDQpNb2RpZmllZDogdHJ1bmsvc3Jj L2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9hcHBsaWNhdGlvbi9hcGkvQWJzdHJhY3RBcmdv SlBhbmVsLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3Nl L2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9hcHBsaWNhdGlv bi9hcGkvQWJzdHJhY3RBcmdvSlBhbmVsLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9 MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdv dW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvYXBwbGljYXRpb24vYXBpL0Fic3RyYWN0QXJnb0pQYW5l bC5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdv dW1sL2FwcGxpY2F0aW9uL2FwaS9BYnN0cmFjdEFyZ29KUGFuZWwuamF2YQkyMDEyLTEyLTMwIDA1 OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cN CisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAg KiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcg bWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg RWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBk aXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCkBAIC00MSw2ICs0MSw4IEBADQogaW1w b3J0IGphdmEuYXd0LkJvcmRlckxheW91dDsNCiBpbXBvcnQgamF2YS5hd3QuUG9pbnQ7DQogaW1w b3J0IGphdmEuYXd0LlJlY3RhbmdsZTsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7 DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiANCiBpbXBvcnQgamF2YXguc3dp bmcuSWNvbjsNCiBpbXBvcnQgamF2YXguc3dpbmcuSkRpYWxvZzsNCkBAIC00OCw3ICs1MCw2IEBA DQogaW1wb3J0IGphdmF4LnN3aW5nLkpUYWJiZWRQYW5lOw0KIGltcG9ydCBqYXZheC5zd2luZy5T d2luZ1V0aWxpdGllczsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1w b3J0IG9yZy5hcmdvdW1sLmkxOG4uVHJhbnNsYXRvcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwudXRp bC5BcmdvRnJhbWU7DQogaW1wb3J0IG9yZy50aWdyaXMuc3dpZGdldHMuT3JpZW50YWJsZTsNCkBA IC02NSw3ICs2Niw3IEBADQogICogVE9ETzogU3Bhd25pbmcgb2Ygd2luZG93cyBkaXNhYmxlZCBp biBzcGF3bigpPHA+DQogICoNCiAgKiBUaXRsZTogVGhpcyBKUGFuZWwga2VlcHMgdHJhY2sgb2Yg aXRzIG93biB0aXRsZS48cD4NCi0gKiANCisgKg0KICAqIEljb246IFRoaXMgSlBhbmVsIGtlZXBz IHRyYWNrIG9mIGl0cyBvd24gaWNvbjsgaS5lLiBhbiBhcnJvdyBwb2ludGluZyB0bw0KICAqIHRo ZSBwYW5lbCB0aGF0IGl0IGdpdmVzIGRldGFpbHMgb2YuPHA+DQogICoNCkBAIC04MywxMiArODQs MTIgQEANCiAgICAgICogTG9nZ2VyLg0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmlu YWwgTG9nZ2VyIExPRyA9DQotICAgICAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihBYnN0cmFjdEFy Z29KUGFuZWwuY2xhc3MpOw0KKyAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihBYnN0cmFjdEFyZ29K UGFuZWwuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50 IE9WRVJMQVBQID0gMzA7DQogDQogICAgIHByaXZhdGUgU3RyaW5nIHRpdGxlID0gVHJhbnNsYXRv ci5sb2NhbGl6ZSgidGFiLnVudGl0bGVkIik7DQotICAgIA0KKw0KICAgICBwcml2YXRlIEljb24g aWNvbiA9IG51bGw7DQogDQogICAgIC8qKg0KQEAgLTE0OSw3ICsxNTAsNyBAQA0KICAgICAgICAg dHJ5IHsNCiAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDbGFzcygpLm5ld0luc3RhbmNlKCk7 DQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsNCi0gICAgICAgICAgICBMT0cuZXJy b3IoImV4Y2VwdGlvbiBpbiBjbG9uZSgpIiwgZXgpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2 ZWwuU0VWRVJFLCAiZXhjZXB0aW9uIGluIGNsb25lKCkiLCBleCk7DQogICAgICAgICB9DQogICAg ICAgICByZXR1cm4gbnVsbDsNCiAgICAgfQ0KDQpNb2RpZmllZDogdHJ1bmsvc3JjL2FyZ291bWwt YXBwL3NyYy9vcmcvYXJnb3VtbC9hcHBsaWNhdGlvbi9hcGkvQXJnby5qYXZhDQpVcmw6IGh0dHA6 Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdv dW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvYXBwbGljYXRpb24vYXBpL0FyZ28uamF2YT92aWV3PWRp ZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9hcHBsaWNhdGlvbi9h cGkvQXJnby5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29y Zy9hcmdvdW1sL2FwcGxpY2F0aW9uL2FwaS9BcmdvLmphdmEJMjAxMi0xMi0zMCAwNTowNjowMS0w ODAwDQpAQCAtMSw2ICsxLDYgQEANCiAvKiAkSWQkDQogICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioN Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29w eXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJp Z2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFs cw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2Ug UHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0 aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtMzgsOCArMzgsNiBAQA0KIA0KIHBhY2thZ2Ug b3JnLmFyZ291bWwuYXBwbGljYXRpb24uYXBpOw0KIA0KLWltcG9ydCBvcmcuYXBhY2hlLmxvZzRq LkNhdGVnb3J5Ow0KLWltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxldmVsOw0KIGltcG9ydCBvcmcu YXJnb3VtbC5jb25maWd1cmF0aW9uLkNvbmZpZ3VyYXRpb247DQogaW1wb3J0IG9yZy5hcmdvdW1s LmNvbmZpZ3VyYXRpb24uQ29uZmlndXJhdGlvbktleTsNCiANCkBAIC0xNDIsNyArMTQwLDcgQEAN CiAgICAgICovDQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ29uZmlndXJhdGlvbktleSBLRVlf U0NSRUVOX01BWElNSVpFRCA9DQogICAgICAgICBDb25maWd1cmF0aW9uLm1ha2VLZXkoInNjcmVl biIsICJtYXhpbWl6ZWQiKTsNCi0gICAgDQorDQogICAgIC8qKg0KICAgICAgKiBLZXkgZm9yIHNv dXRod2VzdCBwYW5lIHdpZHRoLg0KICAgICAgKi8NCkBAIC0yNjAsNyArMjU4LDcgQEANCiAgICAg ICovDQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ29uZmlndXJhdGlvbktleSBLRVlfSU5QVVRf U09VUkNFX0VOQ09ESU5HID0NCiAJQ29uZmlndXJhdGlvbi5tYWtlS2V5KCJpbXBvcnQiLCAiZmls ZSIsICJlbmNvZGluZyIpOw0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIEtleSB0byBzdG9y ZSBzZXR0aW5nIG9mIHN0cmlwcGluZyBkaWFncmFtcyBvbiBYTUkgaW1wb3J0Lg0KICAgICAgKi8N CkBAIC0yOTAsMTMgKzI4OCwxMyBAQA0KICAgICAgICAgQ29uZmlndXJhdGlvbi5tYWtlS2V5KCJs b2NhbGUiKTsNCiANCiAgICAgLyoqDQotICAgICAqIEtleSBmb3Igc2VsZWN0aW5nIHRoZSBncmlk IHNpemUgYW5kIGlmIGl0IHNob3dzIGxpbmVzLCBkb3RzIG9yIG5vbmUuIA0KKyAgICAgKiBLZXkg Zm9yIHNlbGVjdGluZyB0aGUgZ3JpZCBzaXplIGFuZCBpZiBpdCBzaG93cyBsaW5lcywgZG90cyBv ciBub25lLg0KICAgICAgKi8NCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBDb25maWd1cmF0aW9u S2V5IEtFWV9HUklEID0NCiAgICAgICAgIENvbmZpZ3VyYXRpb24ubWFrZUtleSgiZ3JpZCIpOw0K IA0KICAgICAvKioNCi0gICAgICogS2V5IGZvciBzZWxlY3RpbmcgdGhlIHNuYXAgc2l6ZS4gDQor ICAgICAqIEtleSBmb3Igc2VsZWN0aW5nIHRoZSBzbmFwIHNpemUuDQogICAgICAqLw0KICAgICBw dWJsaWMgc3RhdGljIGZpbmFsIENvbmZpZ3VyYXRpb25LZXkgS0VZX1NOQVAgPQ0KICAgICAgICAg Q29uZmlndXJhdGlvbi5tYWtlS2V5KCJzbmFwIik7DQpAQCAtMzE2LDcgKzMxNCw3IEBADQogICAg ICAqIGNvbnNvbGUgbG9nLiAodW51c2VkKQ0KICAgICAgKi8NCiAgICAgcHVibGljIHN0YXRpYyBm aW5hbCBTdHJpbmcgQVJHT19DT05TT0xFX1BSRUZJWCA9ICJhcmdvLmNvbnNvbGUucHJlZml4IjsN Ci0gICAgDQorDQogICAgIC8qKg0KICAgICAgKiBOYW1lIG9mIHRoZSBUYWdEZWZpbml0aW9uIHdo aWNoIGlzIHVzZWQgYXMgdGhlIHR5cGUgb2YgdGFnZ2VkIHZhbHVlcw0KICAgICAgKiBjb250YWlu aW5nIGRvY3VtZW50YXRpb24gZm9yIGEgbW9kZWwgZWxlbWVudC4NCkBAIC0zNTQsNyArMzUyLDcg QEANCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkVSU0lPTl9UQUcgPSAidmVyc2lv biI7DQogDQogICAgIC8qKg0KLSAgICAgKiBBbHRlcm5hdGUgbmFtZSBmb3IgdGhlIFRhZ0RlZmlu aXRpb24gd2hpY2ggcHJlc3VtYWJseSB3YXMgdXNlZCBhdCBzb21lIA0KKyAgICAgKiBBbHRlcm5h dGUgbmFtZSBmb3IgdGhlIFRhZ0RlZmluaXRpb24gd2hpY2ggcHJlc3VtYWJseSB3YXMgdXNlZCBh dCBzb21lDQogICAgICAqIHBvaW50IGluIHRoZSBwYXN0IHRvIGNvbnRhaW4gZG9jdW1lbnRhdGlv biBmb3IgYSBtb2RlbCBlbGVtZW50LiAgT25seQ0KICAgICAgKiB1c2VkIGZvciBiYWNrd2FyZCBj b21wYXRpYmlsdHkuDQogICAgICAqIEBkZXByZWNhdGVkIGZvciAwLjI1LjEgYnkgdGZtb3JyaXMg LSBkb24ndCB1c2UgZm9yIG5ldyBjb2RlLg0KQEAgLTM2MywxOSArMzYxLDE5IEBADQogICAgIHB1 YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPQ1VNRU5UQVRJT05fVEFHX0FMVCA9ICJqYXZhZG9j cyI7DQogDQogICAgIC8qKg0KLSAgICAgKiBUaGUgc2NvcGUgb2YgdGhlIHNldHRpbmdzOiB0aGlz IHNldHRpbmcgaXMgc3RvcmVkIA0KKyAgICAgKiBUaGUgc2NvcGUgb2YgdGhlIHNldHRpbmdzOiB0 aGlzIHNldHRpbmcgaXMgc3RvcmVkDQogICAgICAqIGluIHRoZSB1c2VyZGlyZWN0b3J5IGFuZCB2 YWxpZCBmb3IgdGhlIGFwcGxpY2F0aW9uLg0KICAgICAgKi8NCiAgICAgcHVibGljIHN0YXRpYyBm aW5hbCBpbnQgU0NPUEVfQVBQTElDQVRJT04gPSAwOw0KIA0KICAgICAvKioNCi0gICAgICogVGhl IHNjb3BlIG9mIHRoZSBzZXR0aW5nOiB0aGlzIHNldHRpbmcgaXMgc3RvcmVkIHdpdGggdGhlIHBy b2plY3QsIA0KLSAgICAgKiBpLmUuIGluIGUuZy4gYSB6YXJnbyBmaWxlLiBUaGlzIHNldHRpbmcg d2lsbCBhbHNvIGFwcGx5IA0KLSAgICAgKiB3aGVuIHRoZSB6YXJnbyBmaWxlIGlzIG9wZW5lZCBi eSBhbm90aGVyIHVzZXIsIA0KLSAgICAgKiBvbiBhbm90aGVyIGNvbXB1dGVyLiANCisgICAgICog VGhlIHNjb3BlIG9mIHRoZSBzZXR0aW5nOiB0aGlzIHNldHRpbmcgaXMgc3RvcmVkIHdpdGggdGhl IHByb2plY3QsDQorICAgICAqIGkuZS4gaW4gZS5nLiBhIHphcmdvIGZpbGUuIFRoaXMgc2V0dGlu ZyB3aWxsIGFsc28gYXBwbHkNCisgICAgICogd2hlbiB0aGUgemFyZ28gZmlsZSBpcyBvcGVuZWQg YnkgYW5vdGhlciB1c2VyLA0KKyAgICAgKiBvbiBhbm90aGVyIGNvbXB1dGVyLg0KICAgICAgKi8N CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0NPUEVfUFJPSkVDVCA9IDE7DQotICAgIA0K Kw0KICAgICAvKioNCiAgICAgICogRG9uJ3QgbGV0IHRoaXMgY2xhc3MgYmUgaW5zdGFudGlhdGVk Lg0KICAgICAgKi8NCkBAIC00MTAsNyArNDA4LDggQEANCiANCiAgICAgc3RhdGljIHsNCiAJaWYg KFN5c3RlbS5nZXRQcm9wZXJ0eShBUkdPX0NPTlNPTEVfU1VQUFJFU1MpICE9IG51bGwpIHsNCi0g ICAgICAgICAgICBDYXRlZ29yeS5nZXRSb290KCkuZ2V0TG9nZ2VyUmVwb3NpdG9yeSgpLnNldFRo cmVzaG9sZChMZXZlbC5PRkYpOw0KKy8vICAgICAgICAgICAgQ2F0ZWdvcnkuZ2V0Um9vdCgpLmdl dExvZ2dlclJlcG9zaXRvcnkoKS5zZXRUaHJlc2hvbGQoTGV2ZWwuT0ZGKTsNCisvLyBUT0RPOiBG aW5kIHRoZSBwcm9wZXIgaW1wbGVtZW50YXRpb24gaW4gamF2YS51dGlsLmxvZ2dpbmcgQVBJCSAg ICANCiAJfQ0KICAgICB9DQogDQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3Jj L29yZy9hcmdvdW1sL2FwcGxpY2F0aW9uL2V2ZW50cy9BcmdvRXZlbnRQdW1wLmphdmENClVybDog aHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3Jj L2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9hcHBsaWNhdGlvbi9ldmVudHMvQXJnb0V2ZW50 UHVtcC5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdv dW1sL2FwcGxpY2F0aW9uL2V2ZW50cy9BcmdvRXZlbnRQdW1wLmphdmEJKG9yaWdpbmFsKQ0KKysr IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvYXBwbGljYXRpb24vZXZlbnRz L0FyZ29FdmVudFB1bXAuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEs NiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAo YykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkt MjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBU aGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUg YXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2 MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFp bGFibGUgYXQNCkBAIC00MCwxMCArNDAsMTEgQEANCiANCiBpbXBvcnQgamF2YS51dGlsLkFycmF5 TGlzdDsNCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5n LkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQogaW1wb3J0IGph dmF4LnN3aW5nLlN3aW5nVXRpbGl0aWVzOw0KIA0KLWltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxv Z2dlcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwuYXBwbGljYXRpb24uYXBpLkFyZ29FdmVudExpc3Rl bmVyOw0KIA0KIC8qKg0KQEAgLTU4LDcgKzU5LDggQEANCiAgICAgLyoqDQogICAgICAqIExvZ2dl ci4NCiAgICAgICovDQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dn ZXIuZ2V0TG9nZ2VyKEFyZ29FdmVudFB1bXAuY2xhc3MpOw0KKyAgICBwcml2YXRlIHN0YXRpYyBm aW5hbCBMb2dnZXIgTE9HID0NCisgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoQXJnb0V2ZW50UHVt cC5jbGFzcy5nZXROYW1lKCkpOw0KIA0KICAgICAvKioNCiAgICAgICogPGNvZGU+bGlzdGVuZXJz PC9jb2RlPiBjb250YWlucyB0aGUgbGlzdCBvZiByZWdpc3RlciBsaXN0ZW5lcnMuDQpAQCAtMTc2 LDkgKzE3OCw5IEBADQogICAgIHByaXZhdGUgdm9pZCBoYW5kbGVGaXJlTm90YXRpb25FdmVudCgN CiAgICAgICAgIGZpbmFsIEFyZ29Ob3RhdGlvbkV2ZW50IGV2ZW50LA0KICAgICAgICAgZmluYWwg QXJnb05vdGF0aW9uRXZlbnRMaXN0ZW5lciBsaXN0ZW5lcikgew0KLSAgICAgICANCisNCiAgICAg ICAgIC8vIE5vdGF0aW9uIGV2ZW50cyBhcmUgbGlrZWx5IHRvIGNhdXNlIEdFRi9Td2luZyBvcGVy YXRpb25zLCBzbyB3ZQ0KLSAgICAgICAgLy8gZGlzcGF0Y2ggdGhlbSBvbiB0aGUgU3dpbmcgZXZl bnQgdGhyZWFkIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCANCisgICAgICAgIC8vIGRpc3BhdGNo IHRoZW0gb24gdGhlIFN3aW5nIGV2ZW50IHRocmVhZCBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQN CiAgICAgICAgIC8vIHRoZSByZWNlaXZpbmcgbm90YXRpb25DaGFuZ2VkKCkgbWV0aG9kcyBkb24n dCBuZWVkIHRvIGRlYWwgd2l0aCBpdA0KICAgICAgICAgaWYgKFN3aW5nVXRpbGl0aWVzLmlzRXZl bnREaXNwYXRjaFRocmVhZCgpKSB7DQogICAgICAgICAgICAgZmlyZU5vdGF0aW9uRXZlbnRJbnRl cm5hbChldmVudCwgbGlzdGVuZXIpOw0KQEAgLTE5NCwzMSArMTk2LDMxIEBADQogICAgIHByaXZh dGUgdm9pZCBmaXJlTm90YXRpb25FdmVudEludGVybmFsKEFyZ29Ob3RhdGlvbkV2ZW50IGV2ZW50 LA0KICAgICAgICAgICAgIEFyZ29Ob3RhdGlvbkV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsNCiAg ICAgICAgIHN3aXRjaCAoZXZlbnQuZ2V0RXZlbnRUeXBlKCkpIHsNCi0JY2FzZSBBcmdvRXZlbnRU eXBlcy5OT1RBVElPTl9DSEFOR0VEIDoNCi0JICAgIGxpc3RlbmVyLm5vdGF0aW9uQ2hhbmdlZChl dmVudCk7DQotCSAgICAvKiBSZW1hcms6IFRoZSBjb2RlIGluIA0KLQkgICAgICogUHJvamVjdFNl dHRpbmdzLmluaXQoKSBjdXJyZW50bHkgcHJlc3VtZXMNCi0JICAgICAqIHRoYXQgbm9ib2R5IGlz IHVzaW5nIHRoaXMgZXZlbnQuICovDQotCSAgICBicmVhazsNCisgICAgICAgIGNhc2UgQXJnb0V2 ZW50VHlwZXMuTk9UQVRJT05fQ0hBTkdFRCA6DQorICAgICAgICAgICAgbGlzdGVuZXIubm90YXRp b25DaGFuZ2VkKGV2ZW50KTsNCisgICAgICAgICAgICAvKiBSZW1hcms6IFRoZSBjb2RlIGluDQor ICAgICAgICAgICAgICogUHJvamVjdFNldHRpbmdzLmluaXQoKSBjdXJyZW50bHkgcHJlc3VtZXMN CisgICAgICAgICAgICAgKiB0aGF0IG5vYm9keSBpcyB1c2luZyB0aGlzIGV2ZW50LiAqLw0KKyAg ICAgICAgICAgIGJyZWFrOw0KIA0KLQljYXNlIEFyZ29FdmVudFR5cGVzLk5PVEFUSU9OX0FEREVE IDoNCi0JICAgIGxpc3RlbmVyLm5vdGF0aW9uQWRkZWQoZXZlbnQpOw0KLQkgICAgYnJlYWs7DQor ICAgICAgICBjYXNlIEFyZ29FdmVudFR5cGVzLk5PVEFUSU9OX0FEREVEIDoNCisgICAgICAgICAg ICBsaXN0ZW5lci5ub3RhdGlvbkFkZGVkKGV2ZW50KTsNCisgICAgICAgICAgICBicmVhazsNCiAN Ci0JY2FzZSBBcmdvRXZlbnRUeXBlcy5OT1RBVElPTl9SRU1PVkVEIDoNCi0JICAgIGxpc3RlbmVy Lm5vdGF0aW9uUmVtb3ZlZChldmVudCk7DQotCSAgICBicmVhazsNCisgICAgICAgIGNhc2UgQXJn b0V2ZW50VHlwZXMuTk9UQVRJT05fUkVNT1ZFRCA6DQorICAgICAgICAgICAgbGlzdGVuZXIubm90 YXRpb25SZW1vdmVkKGV2ZW50KTsNCisgICAgICAgICAgICBicmVhazsNCiANCi0JY2FzZSBBcmdv RXZlbnRUeXBlcy5OT1RBVElPTl9QUk9WSURFUl9BRERFRCA6DQotCSAgICBsaXN0ZW5lci5ub3Rh dGlvblByb3ZpZGVyQWRkZWQoZXZlbnQpOw0KLQkgICAgYnJlYWs7DQorICAgICAgICBjYXNlIEFy Z29FdmVudFR5cGVzLk5PVEFUSU9OX1BST1ZJREVSX0FEREVEIDoNCisgICAgICAgICAgICBsaXN0 ZW5lci5ub3RhdGlvblByb3ZpZGVyQWRkZWQoZXZlbnQpOw0KKyAgICAgICAgICAgIGJyZWFrOw0K IA0KLQljYXNlIEFyZ29FdmVudFR5cGVzLk5PVEFUSU9OX1BST1ZJREVSX1JFTU9WRUQgOg0KLQkg ICAgbGlzdGVuZXIubm90YXRpb25Qcm92aWRlclJlbW92ZWQoZXZlbnQpOw0KLQkgICAgYnJlYWs7 DQorICAgICAgICBjYXNlIEFyZ29FdmVudFR5cGVzLk5PVEFUSU9OX1BST1ZJREVSX1JFTU9WRUQg Og0KKyAgICAgICAgICAgIGxpc3RlbmVyLm5vdGF0aW9uUHJvdmlkZXJSZW1vdmVkKGV2ZW50KTsN CisgICAgICAgICAgICBicmVhazsNCiANCiAJZGVmYXVsdCA6DQotCSAgICBMT0cuZXJyb3IoIklu dmFsaWQgZXZlbnQ6IiArIGV2ZW50LmdldEV2ZW50VHlwZSgpKTsNCisgICAgICAgICAgICBMT0cu bG9nKExldmVsLlNFVkVSRSwgIkludmFsaWQgZXZlbnQ6IiArIGV2ZW50LmdldEV2ZW50VHlwZSgp KTsNCiAJICAgIGJyZWFrOw0KICAgICAgICAgfQ0KICAgICB9DQpAQCAtMjI3LDcgKzIyOSw3IEBA DQogICAgICAqIEhhbmRsZSBmaXJpbmcgYSBkaWFncmFtIGFwcGVhcmFuY2UgZXZlbnQuDQogICAg ICAqIDxwPg0KICAgICAgKiBUT0RPOiBUaGlzIG5lZWRzIHRvIGJlIG1hbmFnZWQgb24gYSBwZXIt ZGlhZ3JhbSBvciBwZXItcHJvamVjdCBiYXNpcy4NCi0gICAgICogDQorICAgICAqDQogICAgICAq IEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdG8gYmUgZmlyZWQuDQogICAgICAqIEBwYXJhbSBsaXN0 ZW5lciBUaGUgbGlzdGVuZXIuDQogICAgICAqLw0KQEAgLTI0Miw3ICsyNDQsNyBAQA0KICAgICAg ICAgICAgICAgICAgICAgZmlyZURpYWdyYW1BcHBlYXJhbmNlRXZlbnRJbnRlcm5hbChldmVudCwg bGlzdGVuZXIpOw0KICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfSk7DQotICAgICAg ICB9ICAgICAgICANCisgICAgICAgIH0NCiAgICAgfQ0KIA0KICAgICBwcml2YXRlIHZvaWQgZmly ZURpYWdyYW1BcHBlYXJhbmNlRXZlbnRJbnRlcm5hbCgNCkBAIC0yNTMsNyArMjU1LDcgQEANCiAg ICAgICAgICAgICBsaXN0ZW5lci5kaWFncmFtRm9udENoYW5nZWQoZXZlbnQpOw0KICAgICAgICAg ICAgIGJyZWFrOw0KICAgICAgICAgZGVmYXVsdCA6DQotICAgICAgICAgICAgTE9HLmVycm9yKCJJ bnZhbGlkIGV2ZW50OiIgKyBldmVudC5nZXRFdmVudFR5cGUoKSk7DQorICAgICAgICAgICAgTE9H LmxvZyhMZXZlbC5TRVZFUkUsICJJbnZhbGlkIGV2ZW50OiIgKyBldmVudC5nZXRFdmVudFR5cGUo KSk7DQogICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICB9DQogICAgIH0NCkBAIC0yNzcsNyAr Mjc5LDcgQEANCiAgICAgICAgICAgICBicmVhazsNCiANCiAgICAgICAgIGRlZmF1bHQgOg0KLSAg ICAgICAgICAgIExPRy5lcnJvcigiSW52YWxpZCBldmVudDoiICsgZXZlbnQuZ2V0RXZlbnRUeXBl KCkpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiSW52YWxpZCBldmVudDoi ICsgZXZlbnQuZ2V0RXZlbnRUeXBlKCkpOw0KICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAg fQ0KICAgICB9DQpAQCAtMzEyLDkgKzMxNCw5IEBADQogICAgICAgICBjYXNlIEFyZ29FdmVudFR5 cGVzLlNUQVRVU19QUk9KRUNUX01PRElGSUVEIDoNCiAgICAgICAgICAgICBsaXN0ZW5lci5wcm9q ZWN0TW9kaWZpZWQoZXZlbnQpOw0KICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIA0K Kw0KICAgICAgICAgZGVmYXVsdCA6DQotICAgICAgICAgICAgTE9HLmVycm9yKCJJbnZhbGlkIGV2 ZW50OiIgKyBldmVudC5nZXRFdmVudFR5cGUoKSk7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZl bC5TRVZFUkUsICJJbnZhbGlkIGV2ZW50OiIgKyBldmVudC5nZXRFdmVudFR5cGUoKSk7DQogICAg ICAgICAgICAgYnJlYWs7DQogICAgICAgICB9DQogICAgIH0NCkBAIC0zMzgsNyArMzQwLDcgQEAN CiAgICAgICAgICAgICBicmVhazsNCiANCiAgICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAg TE9HLmVycm9yKCJJbnZhbGlkIGV2ZW50OiIgKyBldmVudC5nZXRFdmVudFR5cGUoKSk7DQorICAg ICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsICJJbnZhbGlkIGV2ZW50OiIgKyBldmVudC5n ZXRFdmVudFR5cGUoKSk7DQogICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICB9DQogICAgIH0N CkBAIC0zNjYsNyArMzY4LDcgQEANCiAgICAgICAgICAgICBicmVhazsNCiANCiAgICAgICAgIGRl ZmF1bHQ6DQotICAgICAgICAgICAgTE9HLmVycm9yKCJJbnZhbGlkIGV2ZW50OiIgKyBldmVudC5n ZXRFdmVudFR5cGUoKSk7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsICJJbnZh bGlkIGV2ZW50OiIgKyBldmVudC5nZXRFdmVudFR5cGUoKSk7DQogICAgICAgICAgICAgYnJlYWs7 DQogICAgICAgICB9DQogICAgIH0NCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9z cmMvb3JnL2FyZ291bWwvYXBwbGljYXRpb24vaGVscGVycy9SZXNvdXJjZUxvYWRlcldyYXBwZXIu amF2YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3Vt bC90cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2FwcGxpY2F0aW9uL2hlbHBl cnMvUmVzb3VyY2VMb2FkZXJXcmFwcGVyLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9 MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdv dW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvYXBwbGljYXRpb24vaGVscGVycy9SZXNvdXJjZUxvYWRl cldyYXBwZXIuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9v cmcvYXJnb3VtbC9hcHBsaWNhdGlvbi9oZWxwZXJzL1Jlc291cmNlTG9hZGVyV3JhcHBlci5qYXZh CTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQogLyogJElkJA0KICAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIENvbnRyaWJ1 dG9ycyAtIHNlZSBiZWxvdw0KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEyIENvbnRyaWJ1dG9y cyAtIHNlZSBiZWxvdw0KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQg dGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAgKiB3aGljaCBh Y2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KQEAgLTks NyArOSw3IEBADQogICogQ29udHJpYnV0b3JzOg0KICAqICAgIFRob21hcyBOZXVzdHVwbnkNCiAg KiAgICBCb2IgVGFybGluZw0KLSAqICAgIA0KKyAqDQogICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQog ICoNCiAgKiBTb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSB3YXMgcHJldmlvdXNseSByZWxlYXNl IHVzaW5nIHRoZSBCU0QgTGljZW5zZToNCkBAIC00NCwxMiArNDQsMTMgQEANCiBpbXBvcnQgamF2 YS51dGlsLkhhc2hNYXA7DQogaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7DQogaW1wb3J0IGph dmEudXRpbC5NYXA7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBq YXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQogaW1wb3J0IGphdmF4LnN3aW5nLkljb247DQog aW1wb3J0IGphdmF4LnN3aW5nLkltYWdlSWNvbjsNCiBpbXBvcnQgamF2YXguc3dpbmcuVUlNYW5h Z2VyOw0KIA0KLWltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsNCiBpbXBvcnQgb3JnLmFy Z291bWwuaTE4bi5UcmFuc2xhdG9yOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5tb2RlbC5EYXRhVHlw ZXNIZWxwZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLm1vZGVsLkludmFsaWRFbGVtZW50RXhjZXB0 aW9uOw0KQEAgLTYyLDcgKzYzLDcgQEANCiAgKiBOZWNlc3Nhcnkgc2luY2UgQXJnb1VNTCBuZWVk cyBzb21lIGV4dHJhIGluaXQuDQogICoNCiAgKiBAc2luY2UgTm92IDI0LCAyMDAyDQotICogQGF1 dGhvciBqYWFwLmJyYW5kZXJob3JzdEB4czRhbGwubmwgDQorICogQGF1dGhvciBqYWFwLmJyYW5k ZXJob3JzdEB4czRhbGwubmwNCiAgKiBAc3RlcmVvdHlwZSBzaW5nbGV0b24NCiAgKi8NCiBwdWJs aWMgZmluYWwgY2xhc3MgUmVzb3VyY2VMb2FkZXJXcmFwcGVyIHsNCkBAIC03MSw3ICs3Miw3IEBA DQogICAgICAqIExvZ2dlci4NCiAgICAgICovDQogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExv Z2dlciBMT0cgPQ0KLSAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihSZXNvdXJjZUxvYWRlcldyYXBw ZXIuY2xhc3MpOw0KKyAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihSZXNvdXJjZUxvYWRlcldyYXBw ZXIuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgcHJpdmF0ZSBzdGF0aWMgSW1hZ2VJY29uIGlu aXRpYWxTdGF0ZUljb247DQogICAgIHByaXZhdGUgc3RhdGljIEltYWdlSWNvbiBkZWVwSWNvbjsN CkBAIC0xNzksNyArMTgwLDcgQEANCiAgICAgICAgICAgICAgICAgLmFkZFJlc291cmNlTG9jYXRp b24oIi9vcmcvYXJnb3VtbC9JbWFnZXMiKTsNCiAgICAgICAgIG9yZy50aWdyaXMuZ2VmLnV0aWwu UmVzb3VyY2VMb2FkZXINCiAgICAgICAgICAgICAgICAgLmFkZFJlc291cmNlTG9jYXRpb24oIi9v cmcvdGlncmlzL2dlZi9JbWFnZXMiKTsNCi0gICAgICAgIA0KKw0KICAgICAgICAgaW5pdGlhbFN0 YXRlSWNvbiA9IFJlc291cmNlTG9hZGVyLmxvb2t1cEljb25SZXNvdXJjZSgiSW5pdGlhbCIpOw0K ICAgICAgICAgZGVlcEljb24gPSBSZXNvdXJjZUxvYWRlci5sb29rdXBJY29uUmVzb3VyY2UoIkRl ZXBIaXN0b3J5Iik7DQogICAgICAgICBzaGFsbG93SWNvbiA9IFJlc291cmNlTG9hZGVyLmxvb2t1 cEljb25SZXNvdXJjZSgiU2hhbGxvd0hpc3RvcnkiKTsNCkBAIC0xOTQsOSArMTk1LDkgQEANCiAg ICAgfQ0KIA0KICAgICAvKioNCi0gICAgICogVGhpcyBwdWJsaWMgb3BlcmF0aW9uIGlzIG5lZWRl ZCANCisgICAgICogVGhpcyBwdWJsaWMgb3BlcmF0aW9uIGlzIG5lZWRlZA0KICAgICAgKiB0byBh bGxvdyBtb2R1bGVzIHRvIGFkZCB0aGVpciBvd24gaW1hZ2VzLg0KLSAgICAgKiANCisgICAgICoN CiAgICAgICogQHBhcmFtIGxvY2F0aW9uIHRoZSBwYXRoIHdlcmUgdGhlIGltYWdlcyBhcmUNCiAg ICAgICovDQogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhZGRSZXNvdXJjZUxvY2F0aW9uKFN0cmlu ZyBsb2NhdGlvbikgew0KQEAgLTI1NiwxMCArMjU3LDEwIEBADQogICAgICAgICB9DQogDQogICAg ICAgICBJY29uIGljb24gPSBpY29uQ2FjaGUuZ2V0KHZhbHVlLmdldENsYXNzKCkpOw0KLSAgICAg ICAgDQorDQogICAgICAgICB0cnkgew0KICAgICAgICAgICAgIGlmIChNb2RlbC5nZXRGYWNhZGUo KS5pc0FQc2V1ZG9zdGF0ZSh2YWx1ZSkpIHsNCi0gICAgICAgICAgICAgICAgDQorDQogICAgICAg ICAgICAgICAgIE9iamVjdCBraW5kID0gTW9kZWwuZ2V0RmFjYWRlKCkuZ2V0S2luZCh2YWx1ZSk7 DQogICAgICAgICAgICAgICAgIERhdGFUeXBlc0hlbHBlciBoZWxwZXIgPSBNb2RlbC5nZXREYXRh VHlwZXNIZWxwZXIoKTsNCiAgICAgICAgICAgICAgICAgaWYgKGhlbHBlci5lcXVhbHNJTklUSUFM S2luZChraW5kKSkgew0KQEAgLTI4Niw3ICsyODcsNyBAQA0KICAgICAgICAgICAgICAgICAvLyBp ZiAoTVBzZXVkb3N0YXRlS2luZC5GSU5BTC5lcXVhbHMoa2luZCkpDQogICAgICAgICAgICAgICAg IC8vIGljb24gPSBfRmluYWxTdGF0ZUljb247DQogICAgICAgICAgICAgfQ0KLSAgICAgICAgICAg IA0KKw0KICAgICAgICAgICAgIGlmIChNb2RlbC5nZXRGYWNhZGUoKS5pc0FBYnN0cmFjdGlvbih2 YWx1ZSkpIHsNCiAgICAgICAgICAgICAgICAgaWNvbiA9IHJlYWxpemVJY29uOw0KICAgICAgICAg ICAgIH0NCkBAIC0yOTgsMjcgKzI5OSwyOCBAQA0KICAgICAgICAgICAgICAgICAgICAgaWNvbiA9 IHNpZ25hbEljb247DQogICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICB9DQotICAgICAg ICAgICAgDQorDQogICAgICAgICAgICAgaWYgKE1vZGVsLmdldEZhY2FkZSgpLmlzQUNvbW1lbnQo dmFsdWUpKSB7DQogICAgICAgICAgICAgICAgIGljb24gPSBjb21tZW50SWNvbjsNCiAgICAgICAg ICAgICB9DQotICAgICAgICAgICAgDQorDQogICAgICAgICAgICAgaWYgKGljb24gPT0gbnVsbCkg ew0KLSAgICAgICAgICAgICAgICANCisNCiAgICAgICAgICAgICAgICAgU3RyaW5nIGNOYW1lID0g TW9kZWwuZ2V0TWV0YVR5cGVzKCkuZ2V0TmFtZSh2YWx1ZSk7DQotICAgICAgICAgICAgICAgIA0K Kw0KICAgICAgICAgICAgICAgICBpY29uID0gbG9va3VwSWNvblJlc291cmNlKGNOYW1lKTsNCiAg ICAgICAgICAgICAgICAgaWYgKGljb24gPT0gbnVsbCkgew0KLSAgICAgICAgICAgICAgICAgICAg TE9HLmRlYnVnKCJDYW4ndCBmaW5kIGljb24gZm9yICIgKyBjTmFtZSk7DQorICAgICAgICAgICAg ICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJDYW4ndCBmaW5kIGljb24gZm9yIHswfSIsIGNOYW1lKTsNCiAgICAgICAgICAgICAgICAgfSBl bHNlIHsNCiAgICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoaWNvbkNhY2hlKSB7DQog ICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkNhY2hlLnB1dCh2YWx1ZS5nZXRDbGFzcygpLCBp Y29uKTsNCiAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgfQ0KLSAgICAg ICAgICAgICAgICANCisNCiAgICAgICAgICAgICB9DQogICAgICAgICB9IGNhdGNoIChJbnZhbGlk RWxlbWVudEV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgTE9HLmRlYnVnKCJBdHRlbXB0ZWQg dG8gZ2V0IGljb24gZm9yIGRlbGV0ZWQgZWxlbWVudCIpOw0KKyAgICAgICAgICAgIExPRy5sb2co TGV2ZWwuRklORSwgIkF0dGVtcHRlZCB0byBnZXQgaWNvbiBmb3IgZGVsZXRlZCBlbGVtZW50Iik7 DQogICAgICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICAgICB9DQogICAgICAgICByZXR1cm4g aWNvbjsNCkBAIC00ODksMTAgKzQ5MSwxMCBAQA0KICAgICAgICAgfQ0KICAgICAgICAgcmV0dXJu IGZvdW5kOw0KICAgICB9DQotICAgIA0KKw0KICAgICAvKioNCiAgICAgICogRmluZCB0aGUgcGF0 aCB0byBhIGdpdmVuIGljb24gYW5kIHJldHVybiBpdCBhcyBhIFVSTC4NCi0gICAgICogDQorICAg ICAqDQogICAgICAqIEBwYXJhbSBuYW1lIGJhc2UgbmFtZSBvZiB0aGUgaWNvbiB0byBzZWFyY2gg Zm9yDQogICAgICAqIEBwYXJhbSBsb2FkZXIgY2xhc3MgbG9hZGVyIHRvIHVzZSBvciBudWxsIHRv IHVzZSB0aGUgZGVmYXVsdCBjbGFzcyBsb2FkZXINCiAgICAgICogQHJldHVybiB0aGUgVVJMIHdo ZXJlIHRoZSBpY29uIHdhcyBmb3VuZA0KQEAgLTUwMCwxMCArNTAyLDEwIEBADQogICAgIHB1Ymxp YyBzdGF0aWMgVVJMIGxvb2t1cEljb25VcmwoU3RyaW5nIG5hbWUsIENsYXNzTG9hZGVyIGxvYWRl cikgew0KICAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZGVyLmxvb2t1cEljb25VcmwobmFtZSwg bG9hZGVyKTsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIEZpbmQgdGhlIHBh dGggdG8gYSBnaXZlbiBpY29uIGFuZCByZXR1cm4gaXQgYXMgYSBVUkwuDQotICAgICAqIA0KKyAg ICAgKg0KICAgICAgKiBAcGFyYW0gbmFtZSBiYXNlIG5hbWUgb2YgdGhlIGljb24gdG8gc2VhcmNo IGZvcg0KICAgICAgKiBAcmV0dXJuIHRoZSBVUkwgd2hlcmUgdGhlIGljb24gd2FzIGZvdW5kDQog ICAgICAqLw0KDQpNb2RpZmllZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3Vt bC9jb2duaXRpdmUvQWdlbmN5LmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9z b3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3Vt bC9jb2duaXRpdmUvQWdlbmN5LmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYm cjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFw cC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL0FnZW5jeS5qYXZhCShvcmlnaW5hbCkNCisrKyB0 cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2NvZ25pdGl2ZS9BZ2VuY3kuamF2 YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0b3Jz IC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0g c2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUg YWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29t cGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNDYsOCAr NDYsOCBAQA0KIGltcG9ydCBqYXZhLnV0aWwuT2JzZXJ2YWJsZTsNCiBpbXBvcnQgamF2YS51dGls Lk9ic2VydmVyOw0KIGltcG9ydCBqYXZhLnV0aWwuU2V0Ow0KLQ0KLWltcG9ydCBvcmcuYXBhY2hl LmxvZzRqLkxvZ2dlcjsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0 IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiANCiAvKioNCiAgKiBBZ2VuY3kgbWFuYWdlcyBD cml0aWNzLiAgU2luY2UgY2xhc3NlcyBhcmUgbm90IHJlYWxseSBmaXJzdCBjbGFzcw0KQEAgLTY3 LDkgKzY3LDkgQEANCiAgKiByZWxldmFudCB0byB0aG9zZSBtYW5pcHVsYXRpb25zIHRvIGJlIGFw cGxpZWQuICBUaGlzIHRyYW5zaXRpb24gaXMNCiAgKiBzdGlsbCBoYWxmIGRvbmUuICBUcmlnZ2Vy cyBhcmUgdGhlIGNyaXRpcXVpbmcgcmVxdWVzdHMuICBUaGUgY29kZQ0KICAqIGZvciB0cmlnZ2Vy cyBpcyBjdXJyZW50bHkgZG9ybWFudCAobGF0ZW50PykuPHA+DQotICogDQorICoNCiAgKiBUT0RP OiBUaGVyZSBpcyBhIHN0cm9uZyBkZXBlbmRlbmN5IGN5Y2xlIGJldHdlZW4gQWdlbmN5IGFuZCBE ZXNpZ25lci4gIFRoZXkNCi0gKiBlaXRoZXIgbmVlZCB0byBiZSBtZXJnZWQgaW50byBhIHNpbmds ZSBjbGFzcyBvciBwYXJ0aXRpb25lZCBkaWZmZXJlbnRseSwgDQorICogZWl0aGVyIG5lZWQgdG8g YmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgY2xhc3Mgb3IgcGFydGl0aW9uZWQgZGlmZmVyZW50bHks DQogICogcGVyaGFwcyB1c2luZyBhbiBpbnRlcmZhY2UgdG8gYnJlYWsgdGhlIGN5Y2xlLiAgVGhl IERlc2lnbmVyIHNpbmdsZXRvbiBnZXRzDQogICogcGFzc2VkIHRvIGFsbW9zdCBldmVyeSBzaW5n bGUgcGFydCBvZiB0aGUgQ3JpdGljIHN1YnN5c3RlbSwgY3JlYXRpbmcgc3Ryb25nDQogICogY291 cGxpbmcgdGhyb3VnaG91dC4gLSB0Zm0gMjAwNzA2MjANCkBAIC04MCwxNiArODAsMTYgQEANCiAg ICAgLyoqDQogICAgICAqIExvZ2dlci4NCiAgICAgICovDQotICAgIHByaXZhdGUgc3RhdGljIGZp bmFsIExvZ2dlciBMT0cgPSBMb2dnZXIuZ2V0TG9nZ2VyKEFnZW5jeS5jbGFzcyk7DQorICAgIHBy aXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dnZXIuZ2V0TG9nZ2VyKEFnZW5jeS5j bGFzcy5nZXROYW1lKCkpOw0KIA0KIA0KICAgICAvKioNCiAgICAgICogQSByZWdpc3RyeSBvZiBh bGwgY3JpdGljcyB0aGF0IGFyZSBjdXJyZW50bHkgbG9hZGVkIGludG8gdGhlDQogICAgICAqIGRl c2lnbiBlbnZpcm9ubWVudC4NCiAgICAgICovDQotICAgIHByaXZhdGUgc3RhdGljIEhhc2h0YWJs ZTxDbGFzcywgTGlzdDxDcml0aWM+PiBjcml0aWNSZWdpc3RyeSA9IA0KKyAgICBwcml2YXRlIHN0 YXRpYyBIYXNodGFibGU8Q2xhc3MsIExpc3Q8Q3JpdGljPj4gY3JpdGljUmVnaXN0cnkgPQ0KICAg ICAgICAgbmV3IEhhc2h0YWJsZTxDbGFzcywgTGlzdDxDcml0aWM+PigxMDApOw0KLSAgICANCisN CiAgICAgcHJpdmF0ZSBzdGF0aWMgTGlzdDxDcml0aWM+IGNyaXRpY3MgPSBuZXcgQXJyYXlMaXN0 PENyaXRpYz4oKTsNCiANCiAgICAgLyoqDQpAQCAtOTcsOCArOTcsOCBAQA0KICAgICAgKiBiZSBh Y3RpdmUuDQogICAgICAqLw0KICAgICBwcml2YXRlIENvbnRyb2xNZWNoIGNvbnRyb2xNZWNoOw0K LSAgICANCi0gICAgcHJpdmF0ZSBzdGF0aWMgSGFzaHRhYmxlPFN0cmluZywgQ3JpdGljPiBzaW5n bGV0b25Dcml0aWNzID0gDQorDQorICAgIHByaXZhdGUgc3RhdGljIEhhc2h0YWJsZTxTdHJpbmcs IENyaXRpYz4gc2luZ2xldG9uQ3JpdGljcyA9DQogICAgICAgICBuZXcgSGFzaHRhYmxlPFN0cmlu ZywgQ3JpdGljPig0MCk7DQogDQogDQpAQCAtMTMwLDcgKzEzMCw3IEBADQogICAgICAqIHRoZUFn ZW5jeSBpcyBhY3R1YWxseSBzdG9yZWQgaW4gPGNvZGU+RGVzaWduZXIudGhlRGVzaWduZXIoKTwv Y29kZT4uDQogICAgICAqDQogICAgICAqIEBzZWUgRGVzaWduZXIjdGhlRGVzaWduZXINCi0gICAg ICogDQorICAgICAqDQogICAgICAqIEByZXR1cm4gQWdlbmN5IHRoZSBBZ2VuY3kgaW5zdGFuY2UN CiAgICAgICovDQogICAgIHB1YmxpYyBzdGF0aWMgQWdlbmN5IHRoZUFnZW5jeSgpIHsNCkBAIC0x ODIsNyArMTgyLDcgQEANCiAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgZG1DbGFzcyA9IENs YXNzLmZvck5hbWUoZG1DbGFzc05hbWUpOw0KICAgICAgICAgfSBjYXRjaCAoamF2YS5sYW5nLkNs YXNzTm90Rm91bmRFeGNlcHRpb24gZSkgew0KLSAgICAgICAgICAgIExPRy5lcnJvcigiRXJyb3Ig bG9hZGluZyBkbSAiICsgZG1DbGFzc05hbWUsIGUpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2 ZWwuU0VWRVJFLCAiRXJyb3IgbG9hZGluZyBkbSAiICsgZG1DbGFzc05hbWUsIGUpOw0KICAgICAg ICAgICAgIHJldHVybjsNCiAgICAgICAgIH0NCiAgICAgICAgIENyaXRpYyBjciA9IHNpbmdsZXRv bkNyaXRpY3MuZ2V0KGNyQ2xhc3NOYW1lKTsNCkBAIC0xOTEsMTYgKzE5MSwxNiBAQA0KICAgICAg ICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgIGNyQ2xhc3MgPSBDbGFzcy5mb3JOYW1lKGNy Q2xhc3NOYW1lKTsNCiAgICAgICAgICAgICB9IGNhdGNoIChqYXZhLmxhbmcuQ2xhc3NOb3RGb3Vu ZEV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgICAgIExPRy5lcnJvcigiRXJyb3IgbG9hZGlu ZyBjciAiICsgY3JDbGFzc05hbWUsIGUpOw0KKyAgICAgICAgICAgICAgICBMT0cubG9nKExldmVs LlNFVkVSRSwgIkVycm9yIGxvYWRpbmcgY3IgIiArIGNyQ2xhc3NOYW1lLCBlKTsNCiAgICAgICAg ICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICB0cnkgew0KICAg ICAgICAgICAgICAgICBjciA9IChDcml0aWMpIGNyQ2xhc3MubmV3SW5zdGFuY2UoKTsNCiAgICAg ICAgICAgICB9IGNhdGNoIChqYXZhLmxhbmcuSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7DQot ICAgICAgICAgICAgICAgIExPRy5lcnJvcigiRXJyb3IgaW5zdGFuY2F0aW5nIGNyICIgKyBjckNs YXNzTmFtZSwgZSk7DQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiRXJy b3IgaW5zdGFuY2F0aW5nIGNyICIgKyBjckNsYXNzTmFtZSwgZSk7DQogICAgICAgICAgICAgICAg IHJldHVybjsNCiAgICAgICAgICAgICB9IGNhdGNoIChqYXZhLmxhbmcuSW5zdGFudGlhdGlvbkV4 Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgICAgIExPRy5lcnJvcigiRXJyb3IgaW5zdGFuY2F0 aW5nIGNyICIgKyBjckNsYXNzTmFtZSwgZSk7DQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2 ZWwuU0VWRVJFLCAiRXJyb3IgaW5zdGFuY2F0aW5nIGNyICIgKyBjckNsYXNzTmFtZSwgZSk7DQog ICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgc2lu Z2xldG9uQ3JpdGljcy5wdXQoY3JDbGFzc05hbWUsIGNyKTsNCkBAIC0yMjgsNyArMjI4LDcgQEAN CiAgICAgICAgIGlmICghdGhlQ3JpdGljcy5jb250YWlucyhjcikpIHsNCiAgICAgICAgICAgICB0 aGVDcml0aWNzLmFkZChjcik7DQogICAgICAgICAgICAgbm90aWZ5U3RhdGljT2JzZXJ2ZXJzKGNy KTsNCi0gICAgICAgICAgICBMT0cuZGVidWcoIlJlZ2lzdGVyZWQ6ICIgKyB0aGVDcml0aWNzLnRv U3RyaW5nKCkpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgIlJlZ2lzdGVyZWQ6 IHswfSIsIHRoZUNyaXRpY3MgKTsNCiAgICAgICAgICAgICBjYWNoZWRDcml0aWNzLnJlbW92ZShj bGF6eik7DQogICAgICAgICAgICAgYWRkQ3JpdGljKGNyKTsNCiAgICAgICAgIH0NCkBAIC0yNDIs MjEgKzI0MiwyMSBAQA0KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcmVnaXN0ZXIoQ3JpdGljIGNy LCBPYmplY3QgY2xhenopIHsNCiAgICAgICAgIHJlZ2lzdGVyKGNyLCAoQ2xhc3MpIGNsYXp6KTsN CiAgICAgfQ0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIFJlZ2lzdGVyIGEgY3JpdGljIGlu IHRoZSBnbG9iYWwgdGFibGUgb2YgY3JpdGljcyB0aGF0IGhhdmUgYmVlbg0KICAgICAgKiBsb2Fk ZWQuDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAcGFyYW0gY3IgdGhlIGNyaXRpYyB0byBy ZWdpc3Rlcg0KICAgICAgKi8NCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVyKENyaXRp YyBjcikgew0KICAgICAgICAgU2V0PE9iamVjdD4gbWV0YXMgPSBjci5nZXRDcml0aWNpemVkRGVz aWduTWF0ZXJpYWxzKCk7DQogICAgICAgICBmb3IgKE9iamVjdCBtZXRhIDogbWV0YXMpIHsNCi0g ICAgICAgICAgICByZWdpc3RlcihjciwgbWV0YSk7ICAgICAgICAgICAgDQorICAgICAgICAgICAg cmVnaXN0ZXIoY3IsIG1ldGEpOw0KICAgICAgICAgfQ0KICAgICB9DQotICAgIA0KLSAgICBwcml2 YXRlIHN0YXRpYyBIYXNodGFibGU8Q2xhc3MsIENvbGxlY3Rpb248Q3JpdGljPj4gY2FjaGVkQ3Jp dGljcyA9IA0KKw0KKyAgICBwcml2YXRlIHN0YXRpYyBIYXNodGFibGU8Q2xhc3MsIENvbGxlY3Rp b248Q3JpdGljPj4gY2FjaGVkQ3JpdGljcyA9DQogICAgICAgICBuZXcgSGFzaHRhYmxlPENsYXNz LCBDb2xsZWN0aW9uPENyaXRpYz4+KCk7DQogDQogICAgIC8qKg0KQEAgLTM1NSw3ICszNTUsNyBA QA0KICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgYy5jcml0aXF1 ZShkbSwgZCk7DQogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgew0KLSAg ICAgICAgICAgICAgICAgICAgTE9HLmVycm9yKCJEaXNhYmxpbmcgY3JpdGlxdWUgZHVlIHRvIGV4 Y2VwdGlvblxuIg0KKyAgICAgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsICJE aXNhYmxpbmcgY3JpdGlxdWUgZHVlIHRvIGV4Y2VwdGlvblxuIg0KIAkJCSAgICAgICsgYyArICJc biIgKyBkbSwNCiAJCQkgICAgICBleCk7DQogICAgICAgICAgICAgICAgICAgICBjLnNldEVuYWJs ZWQoZmFsc2UpOw0KQEAgLTM3MSw4ICszNzEsOCBAQA0KICAgICAgKiBOb3RlOiBJIGFtIHNldHRp bmcgZ2xvYmFsIGRhdGEsIGkuZS4gdGhlDQogICAgICAqIGlzRW5hYmxlZCBiaXQgaW4gZWFjaCBj cml0aWMsIGJhc2VkIG9uIHRoZSBuZWVkcyBvZiBvbmUgZGVzaWduZXIuDQogICAgICAqIEkgZG9u J3QgcmVhbGx5IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBEZXNpZ25lci4NCi0gICAgICogV2hpY2gg aXMgd2h5IGVhY2ggZGVzaWduZXIgDQotICAgICAqIChpZiB3ZSB3b3VsZCBzdXBwb3J0IG1vcmUg dGhhbiBvbmUgZGVzaWduZXIpIA0KKyAgICAgKiBXaGljaCBpcyB3aHkgZWFjaCBkZXNpZ25lcg0K KyAgICAgKiAoaWYgd2Ugd291bGQgc3VwcG9ydCBtb3JlIHRoYW4gb25lIGRlc2lnbmVyKQ0KICAg ICAgKiBoYXMgaGlzIG93biBBZ2VuY3kuDQogICAgICAqDQogICAgICAqIFRPRE86IHNob3VsZCBs b29wIG92ZXIgc2ltcGxlciBsaXN0IG9mIGNyaXRpY3MsIG5vdCBDb21wb3VuZENyaXRpY3MNCg0K TW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZl L0NyaXRpYy5qYXZhDQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dz ZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZl L0NyaXRpYy5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9h cmdvdW1sL2NvZ25pdGl2ZS9Dcml0aWMuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2Fy Z291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9jb2duaXRpdmUvQ3JpdGljLmphdmEJMjAxMi0xMi0z MCAwNTowNjowMS0wODAwDQpAQCAtMSw2ICsxLDYgQEANCiAvKiAkSWQkDQogICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA5IENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxv dw0KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEyIENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0K ICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWlu ZyBtYXRlcmlhbHMNCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlz IGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KQEAgLTQ1LDEwICs0NSwxMSBAQA0K IGltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCiBpbXBvcnQgamF2YS51dGlsLk9ic2VydmFibGU7DQog aW1wb3J0IGphdmEudXRpbC5TZXQ7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0K K2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQogaW1wb3J0IGphdmF4LnN3aW5n Lkljb247DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KIGltcG9ydCBvcmcu YXJnb3VtbC5hcHBsaWNhdGlvbi5oZWxwZXJzLkFwcGxpY2F0aW9uVmVyc2lvbjsNCiBpbXBvcnQg b3JnLmFyZ291bWwuYXBwbGljYXRpb24uaGVscGVycy5SZXNvdXJjZUxvYWRlcldyYXBwZXI7DQog aW1wb3J0IG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5jcml0aWNzLlNub296ZU9yZGVyOw0KQEAgLTcw LDE0ICs3MSwxNCBAQA0KICAqDQogICogQGF1dGhvciBKYXNvbiBSb2JiaW5zDQogICovDQotcHVi bGljIGNsYXNzIENyaXRpYyANCi0gICAgZXh0ZW5kcyBPYnNlcnZhYmxlIA0KK3B1YmxpYyBjbGFz cyBDcml0aWMNCisgICAgZXh0ZW5kcyBPYnNlcnZhYmxlDQogICAgIGltcGxlbWVudHMgUG9zdGVy LCBTZXJpYWxpemFibGUgew0KIA0KICAgICAvKioNCiAgICAgICogTG9nZ2VyLg0KICAgICAgKi8N Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIo Q3JpdGljLmNsYXNzKTsNCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExv Z2dlci5nZXRMb2dnZXIoQ3JpdGljLmNsYXNzLmdldE5hbWUoKSk7DQogDQogICAgIC8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8N CiAgICAgLy8gY29uc3RhbnRzDQpAQCAtMTc0LDkgKzE3NSw5IEBADQogCWNsc05hbWUgPSBjbHNO YW1lLnN1YnN0cmluZyhjbHNOYW1lLmxhc3RJbmRleE9mKCIuIikgKyAxKTsNCiAJU3RyaW5nIHNp bmdsZVZlcnNpb25VUkwgPQ0KIAkgICAgVHJhbnNsYXRvci5sb2NhbGl6ZSgidGFiLmhlbHAucGF0 aC5tYW51YWxjcml0aWMiKQ0KLQkgICAgKyAibWFudWFsLSIgDQorCSAgICArICJtYW51YWwtIg0K IAkgICAgKyBBcHBsaWNhdGlvblZlcnNpb24uZ2V0U3RhYmxlVmVyc2lvbigpDQotCSAgICArICIt c2luZ2xlL2FyZ29tYW51YWwuaHRtbCI7IA0KKwkgICAgKyAiLXNpbmdsZS9hcmdvbWFudWFsLmh0 bWwiOw0KIAlyZXR1cm4gc2luZ2xlVmVyc2lvblVSTCArICIjY3JpdGljcy4iICsgY2xzTmFtZTsN CiAgICAgfQ0KIA0KQEAgLTI0Nyw3ICsyNDgsNyBAQA0KICAgICAgKiBDb250cm9sIHJlY29yZHMg dXNlZCBpbiBkZXRlcm1pbmluZyBpZiB0aGlzIENyaXRpYyBzaG91bGQgYmUNCiAgICAgICogYWN0 aXZlLg0KICAgICAgKi8NCi0gICAgcHJpdmF0ZSBIYXNodGFibGU8U3RyaW5nLCBPYmplY3Q+IGNv bnRyb2xSZWNzID0gDQorICAgIHByaXZhdGUgSGFzaHRhYmxlPFN0cmluZywgT2JqZWN0PiBjb250 cm9sUmVjcyA9DQogICAgICAgICBuZXcgSGFzaHRhYmxlPFN0cmluZywgT2JqZWN0PigpOw0KIA0K ICAgICBwcml2YXRlIExpc3RTZXQ8U3RyaW5nPiBrbm93bGVkZ2VUeXBlcyA9IG5ldyBMaXN0U2V0 PFN0cmluZz4oKTsNCkBAIC0yODIsNyArMjgzLDcgQEANCiANCiAJbW9yZUluZm9VUkwgPSBkZWZh dWx0TW9yZUluZm9VUkwoKTsNCiAJZGVzY3JpcHRpb24gPSBUcmFuc2xhdG9yLmxvY2FsaXplKCJt aXNjLmNyaXRpYy5uby1kZXNjcmlwdGlvbiIpOw0KLQloZWFkbGluZSA9IFRyYW5zbGF0b3IubWVz c2FnZUZvcm1hdCgibWlzYy5jcml0aWMuZGVmYXVsdC1oZWFkbGluZSIsIA0KKwloZWFkbGluZSA9 IFRyYW5zbGF0b3IubWVzc2FnZUZvcm1hdCgibWlzYy5jcml0aWMuZGVmYXVsdC1oZWFkbGluZSIs DQogCSAgICAgICAgbmV3IE9iamVjdFtdIHtnZXRDbGFzcygpLmdldE5hbWUoKX0pOw0KIAlwcmlv cml0eSA9IFRvRG9JdGVtLk1FRF9QUklPUklUWTsNCiAgICAgfQ0KQEAgLTM4MCwxMyArMzgxLDEz IEBADQogCS8vIGxpbmUgaW4gdGhlIHdob2xlIG9mIEFyZ29VTUwuIEl0IGFsbG9jYXRlcyBhcHBy b3hpbWF0ZWx5IDE4JSBvZg0KIAkvLyBhbGwgbWVtb3J5IGFsbG9jYXRlZC4NCiAJLy8gU3VnZ2Vz dGlvbnMgZm9yIHNvbHV0aW9uczoNCi0JLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYSBMT0cuZGVidWco U3RyaW5nLCBTdHJpbmcpIG1ldGhvZCB0aGF0IGNhbg0KKyAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMg YSBMT0cubG9nKExldmVsLkZJTkUsU3RyaW5nLCBTdHJpbmcpIG1ldGhvZCB0aGF0IGNhbg0KIAkv LyBiZSB1c2VkIGluc3RlYWQuDQogCS8vIFVzZSB0d28gY2FsbHMuDQogCS8vIEZvciBub3cgSSAo TGludXMpIGp1c3QgY29tbWVudCBpdCBvdXQuDQotCS8vIExPRy5kZWJ1ZygiYXBwbHlpbmcgY3Jp dGljOiAiICsgX2hlYWRsaW5lKTsNCisgIC8vIExPRy5sb2coTGV2ZWwuRklORSwgImFwcGx5aW5n IGNyaXRpYzogIiArIF9oZWFkbGluZSk7DQogCWlmIChwcmVkaWNhdGUoZG0sIGRzZ3IpKSB7DQot CSAgICAvLyBMT0cuZGVidWcoInByZWRpY2F0ZSgpIHJldHVybmVkIHRydWUsIGNyZWF0aW5nIFRv RG9JdGVtIik7DQorICAgICAgLy8gTE9HLmxvZyhMZXZlbC5GSU5FLCAicHJlZGljYXRlKCkgcmV0 dXJuZWQgdHJ1ZSwgY3JlYXRpbmcgVG9Eb0l0ZW0iKTsNCiAJICAgIFRvRG9JdGVtIGl0ZW0gPSB0 b0RvSXRlbShkbSwgZHNncik7DQogCSAgICBwb3N0SXRlbShpdGVtLCBkbSwgZHNncik7DQogCX0N CkBAIC00NDcsNyArNDQ4LDcgQEANCiAgICAgICovDQogICAgIHB1YmxpYyBib29sZWFuIHN0aWxs VmFsaWQoVG9Eb0l0ZW0gaSwgRGVzaWduZXIgZHNncikgew0KIAlpZiAoIWlzQWN0aXZlKCkpIHsN Ci0JICAgIExPRy53YXJuKCJnb3QgdG8gc3RpbGx2YWxpZCB3aGlsZSBub3QgYWN0aXZlIik7DQor ICAgICAgTE9HLmxvZyhMZXZlbC5XQVJOSU5HLCAiZ290IHRvIHN0aWxsdmFsaWQgd2hpbGUgbm90 IGFjdGl2ZSIpOw0KIAkgICAgcmV0dXJuIGZhbHNlOw0KIAl9DQogCWlmIChpLmdldE9mZmVuZGVy cygpLnNpemUoKSAhPSAxKSB7DQpAQCAtNDc4LDcgKzQ3OSw3IEBADQogICAgIHB1YmxpYyBMaXN0 PERlY2lzaW9uPiBnZXRTdXBwb3J0ZWREZWNpc2lvbnMoKSB7DQogICAgICAgICByZXR1cm4gc3Vw cG9ydGVkRGVjaXNpb25zOw0KICAgICB9DQotICAgIA0KKw0KICAgICAvKioNCiAgICAgICogQHBh cmFtIGQgdGhlIGRlY2lzaW9uDQogICAgICAqLw0KQEAgLTY0OSw4ICs2NTAsOCBAQA0KICAgICAg ICAgICAgIG5vdGlmeU9ic2VydmVycyh0aGlzKTsNCiAJfQ0KICAgICB9DQotICAgIA0KLSAgICAN CisNCisNCiANCiAgICAgLyoqDQogICAgICAqIEFkZCBzb21lIGF0dHJpYnV0ZSB1c2VkIGJ5IENv bnRyb2xNZWNoIHRvIGRldGVybWluZSBpZiB0aGlzDQpAQCAtNjg5LDcgKzY5MCw3IEBADQogICAg ICAqIEByZXR1cm4gdHJ1ZSBpZiBlbmFibGVkDQogICAgICAqLw0KICAgICBwdWJsaWMgYm9vbGVh biBpc0VuYWJsZWQoKSB7DQotICAgICAgICBpZiAodGhpcy5nZXRDcml0aWNOYW1lKCkgIT0gbnVs bCANCisgICAgICAgIGlmICh0aGlzLmdldENyaXRpY05hbWUoKSAhPSBudWxsDQogICAgICAgICAg ICAgICAgICYmIHRoaXMuZ2V0Q3JpdGljTmFtZSgpLmVxdWFscygiQ3JOb0d1YXJkIikpIHsNCiAg ICAgICAgICAgICBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsNCiAgICAgICAgIH0NCkBAIC03 MjcsOCArNzI4LDggQEANCiAgICAgICogQ2hlY2tzIGlmIHRoZSBjcml0aWMgaXMgY3VycmVudGx5 IHNub296ZWQuDQogICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY3JpdGljIGlzIHNub296ZWQN CiAgICAgICovDQotICAgIHB1YmxpYyBib29sZWFuIGlzU25vb3plZCgpIHsgDQotICAgICAgICBy ZXR1cm4gc25vb3plT3JkZXIoKS5nZXRTbm9vemVkKCk7IA0KKyAgICBwdWJsaWMgYm9vbGVhbiBp c1Nub296ZWQoKSB7DQorICAgICAgICByZXR1cm4gc25vb3plT3JkZXIoKS5nZXRTbm9vemVkKCk7 DQogICAgIH0NCiANCiAgICAgLyoqDQpAQCAtNzk0LDkgKzc5NSw5IEBADQogICAgICAgICAgICAg ICAgIGluaXRXaXphcmQodyk7DQogICAgICAgICAgICAgICAgIHJldHVybiB3Ow0KICAgICAgICAg ICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWxsRXgpIHsNCi0gICAgICAgICAg ICAgICAgTE9HLmVycm9yKCJDb3VsZCBub3QgYWNjZXNzIHdpemFyZDogIiwgaWxsRXgpOw0KKyAg ICAgICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwgIkNvdWxkIG5vdCBhY2Nlc3Mgd2l6 YXJkOiAiLCBpbGxFeCk7DQogICAgICAgICAgICAgfSBjYXRjaCAoSW5zdGFudGlhdGlvbkV4Y2Vw dGlvbiBpbnN0RXgpIHsNCi0gICAgICAgICAgICAgICAgTE9HLmVycm9yKCJDb3VsZCBub3QgaW5z dGFudGlhdGUgd2l6YXJkOiAiLCBpbnN0RXgpOw0KKyAgICAgICAgICAgICAgICBMT0cubG9nKExl dmVsLlNFVkVSRSwgIkNvdWxkIG5vdCBpbnN0YW50aWF0ZSB3aXphcmQ6ICIsIGluc3RFeCk7DQog ICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KICAgICAgICAgcmV0dXJuIG51bGw7DQpAQCAtOTgw LDE0ICs5ODEsMTQgQEANCiANCiAgICAgLyoqDQogICAgICAqICBHZXQgdGhlIGRlc2lnbiBtYXRl cmlhbHMgdG8gYmUgY3JpdGljaXplZCBieSB0aGlzIGNyaXRpYw0KLSAgICAgKiANCisgICAgICoN CiAgICAgICogQHJldHVybiB0aGUgZGVzaWduIG1hdGVyaWFscw0KICAgICAgKi8NCiAgICAgcHVi bGljIFNldDxPYmplY3Q+IGdldENyaXRpY2l6ZWREZXNpZ25NYXRlcmlhbHMoKSB7DQogICAgICAg ICBTZXQ8T2JqZWN0PiByZXQgPSBuZXcgSGFzaFNldDxPYmplY3Q+KCk7DQogICAgICAgICByZXR1 cm4gcmV0Ow0KICAgICB9DQotICAgICAgICANCisNCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KICAgICAvLyBkZXNp Z24gZmVlZGJhY2sNCiANCkBAIC0xMDAwLDcgKzEwMDEsNyBAQA0KICAgICAgKg0KICAgICAgKiBU T0RPOiBDcml0aWMncyBtYXkgd2FudCB0byBhZGQgbmV3IGZpZWxkcyB0byBhDQogICAgICAqIFRv RG9JdGVtIHRvIG1ha2Ugc3RpbGxWYWxpZCBtb3JlIGVmZmljZW50Lg0KLSAgICAgKiANCisgICAg ICoNCiAgICAgICogQHNlZSBDcml0aWMjY3JpdGlxdWUNCiAgICAgICoNCiAgICAgICogQHBhcmFt IGRtIHRoZSBvZmZlbmRlcg0KQEAgLTEwMjIsNyArMTAyMyw3IEBADQogICAgICAqIHByb2JsZW0g Y2FuIGJlIGZpeGVkLiBUaGUgZml4SXQoKSBtZXRob2QgYWN0dWFsbHkgZG9lcyB0aGUgZml4Lg0K ICAgICAgKg0KICAgICAgKiBAc2VlIG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5Qb3N0ZXIjY2FuRml4 SXQob3JnLmFyZ291bWwuY29nbml0aXZlLlRvRG9JdGVtKQ0KLSAgICAgKiBBbHNvIA0KKyAgICAg KiBBbHNvDQogICAgICAqIEBzZWUgQ3JpdGljI2ZpeEl0DQogICAgICAqLw0KICAgICBwdWJsaWMg Ym9vbGVhbiBjYW5GaXhJdChUb0RvSXRlbSBpdGVtKSB7DQpAQCAtMTAzNSw3ICsxMDM2LDcgQEAN CiAgICAgcHVibGljIHZvaWQgZml4SXQoVG9Eb0l0ZW0gaXRlbSwgT2JqZWN0IGFyZykgew0KICAg ICB9DQogDQotICAgIA0KKw0KICAgICAvKg0KICAgICAgKiBSZXBseSBhIHN0cmluZyB0aGF0IGRl c2NyaWJlcyB0aGlzIENyaXRpYy4gSWRlbnRpY2FsIHRvIGdldENyaXRpY05hbWUoKQ0KICAgICAg Kg0KDQpNb2RpZmllZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9jb2du aXRpdmUvRGVzaWduZXIuamF2YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJj ZS9icm93c2UvYXJnb3VtbC90cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2Nv Z25pdGl2ZS9EZXNpZ25lci5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIy PTE5OTA3DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAv c3JjL29yZy9hcmdvdW1sL2NvZ25pdGl2ZS9EZXNpZ25lci5qYXZhCShvcmlnaW5hbCkNCisrKyB0 cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2NvZ25pdGl2ZS9EZXNpZ25lci5q YXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQogLyogJElkJA0K ICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBDb250cmlidXRv cnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiBDb250cmlidXRvcnMg LSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRo ZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNj b21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCkBAIC00NSwx MSArNDUsMTIgQEANCiBpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOw0KIGltcG9ydCBqYXZh LnV0aWwuTGlzdDsNCiBpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7DQoraW1wb3J0IGphdmEu dXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQog DQogaW1wb3J0IGphdmF4LnN3aW5nLkFjdGlvbjsNCiBpbXBvcnQgamF2YXguc3dpbmcuSWNvbjsN CiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1s LmFwcGxpY2F0aW9uLmFwaS5BcmdvOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5jb25maWd1cmF0aW9u LkNvbmZpZ3VyYXRpb247DQogaW1wb3J0IG9yZy5hcmdvdW1sLmNvbmZpZ3VyYXRpb24uQ29uZmln dXJhdGlvbktleTsNCkBAIC02OCwxMCArNjksMTAgQEANCiAgKg0KICAqIEN1cnJlbnRseSAoYWxt b3N0KSBldmVyeXRoaW5nIGlzIGhhcmRjb2RlZC4gV2hhdCBjYW4gYmUgY29uZmlndXJhYmxlPz88 cD4NCiAgKg0KLSAqIFRoZSBUb0RvTGlzdCBpcyBkZXBlbmRlbnQgb24gdGhpcyBjbGFzcywgDQor ICogVGhlIFRvRG9MaXN0IGlzIGRlcGVuZGVudCBvbiB0aGlzIGNsYXNzLA0KICAqIGkuZS4gZWFj aCBkZXNpZ25lciBoYXMgaXRzIFRvRG9MaXN0LjxwPg0KLSAqIA0KLSAqIEVhY2ggZGVzaWduZXIg aGFzIGhpcyBvd24gQWdlbmN5LCANCisgKg0KKyAqIEVhY2ggZGVzaWduZXIgaGFzIGhpcyBvd24g QWdlbmN5LA0KICAqIHdoaWNoIGlzIHRoZSBvbmx5IGNsYXNzIHRoYXQga25vd3MgYWxsIHRoZSBj cml0aWNzLjxwPg0KICAqDQogICogVGhpcyBjbGFzcyBsaXN0ZW5zIHRvIHByb3BlcnR5IGNoYW5n ZXMgZnJvbSAuLi4/PHA+DQpAQCAtODAsMTEgKzgxLDExIEBADQogICogaW1wbGVtZW50cyB0aGUg UG9zdGVyIGludGVyZmFjZS48cD4NCiAgKg0KICAqIFRPRE86IFRoZXJlIGlzIGEgc3Ryb25nIGRl cGVuZGVuY3kgY3ljbGUgYmV0d2VlbiBBZ2VuY3kgYW5kIERlc2lnbmVyLiAgVGhleQ0KLSAqIGVp dGhlciBuZWVkIHRvIGJlIG1lcmdlZCBpbnRvIGEgc2luZ2xlIGNsYXNzIG9yIHBhcnRpdGlvbmVk IGRpZmZlcmVudGx5LCANCisgKiBlaXRoZXIgbmVlZCB0byBiZSBtZXJnZWQgaW50byBhIHNpbmds ZSBjbGFzcyBvciBwYXJ0aXRpb25lZCBkaWZmZXJlbnRseSwNCiAgKiBwZXJoYXBzIHVzaW5nIGFu IGludGVyZmFjZSB0byBicmVhayB0aGUgY3ljbGUuICBUaGUgRGVzaWduZXIgc2luZ2xldG9uIGdl dHMNCiAgKiBwYXNzZWQgdG8gYWxtb3N0IGV2ZXJ5IHNpbmdsZSBwYXJ0IG9mIHRoZSBDcml0aWMg c3Vic3lzdGVtLCBjcmVhdGluZyBzdHJvbmcNCiAgKiBjb3VwbGluZyB0aHJvdWdob3V0LiAtIHRm bSAyMDA3MDYyMA0KLSAqIA0KKyAqDQogICogQGF1dGhvciBKYXNvbiBSb2JiaW5zDQogICovDQog cHVibGljIGZpbmFsIGNsYXNzIERlc2lnbmVyDQpAQCAtOTQsNyArOTUsOCBAQA0KICAgICAvKioN CiAgICAgICogTG9nZ2VyLg0KICAgICAgKi8NCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9n Z2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoRGVzaWduZXIuY2xhc3MpOw0KKyAgICBwcml2YXRl IHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCisgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoRGVz aWduZXIuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgLyoqDQogICAgICAqIHRoZSBzaW5nbGV0 b24gb2YgdGhpcyBjbGFzcy4NCkBAIC0yNDIsNyArMjQ0LDcgQEANCiAgICAgICAgIHRvRG9MaXN0 LnNwYXduVmFsaWRpdHlDaGVja2VyKHRoaXMpOw0KIA0KICAgICAgICAgdXNlcldvcmtpbmcgPSBm YWxzZTsNCi0gICAgICAgIA0KKw0KICAgICAgICAgY3JpdGlxdWluZ0ludGVydmFsID0gODAwMDsN CiAgICAgICAgIGNyaXRpcXVlQ1BVUGVyY2VudCA9IDEwOw0KIA0KQEAgLTMwOSw3ICszMTEsNyBA QA0KICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRoaXMud2FpdCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElu dGVycnVwdGVkRXhjZXB0aW9uIGlnbm9yZSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMT0cuZXJyb3IoIkludGVycnVwdGVkRXhjZXB0aW9uISEhIiwgaWdub3JlKTsNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsICJJbnRlcnJ1cHRlZEV4 Y2VwdGlvbiEhISIsIGlnbm9yZSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICB9DQpAQCAtMzc0LDcgKzM3Niw3IEBA DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0gY2F0Y2ggKEludmFsaWRFbGVtZW50RXhjZXB0aW9uIGUpIHsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGxldCBhIHRyYW5zaWVudCBlcnJvciBr aWxsIHRoZSB0aHJlYWQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExPRy53YXJu KCJFbGVtZW50ICIgKyBkbQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTE9HLmxv ZyhMZXZlbC5XQVJOSU5HLCAiRWxlbWVudCAiICsgZG0NCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKyAiY2F1c2VkIGFuIEludmFsaWRFbGVtZW50RXhjZXB0aW9uLiAg Ig0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJJZ25vcmluZyBm b3IgdGhpcyBwYXNzLiIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQpAQCAtMzkw LDE1ICszOTIsMTUgQEANCiAgICAgICAgICAgICAgICAgbG9uZyBzbGVlcER1cmF0aW9uID0NCiAg ICAgICAgICAgICAgICAgICAgIE1hdGgubWluKGN5Y2xlRHVyYXRpb24gLSBjcml0aXF1ZUR1cmF0 aW9uLCAzMDAwKTsNCiAgICAgICAgICAgICAgICAgc2xlZXBEdXJhdGlvbiA9IE1hdGgubWF4KHNs ZWVwRHVyYXRpb24sIDEwMDApOw0KLSAgICAgICAgICAgICAgICBMT0cuZGVidWcoInNsZWVwRHVy YXRpb249ICIgKyBzbGVlcER1cmF0aW9uKTsNCisgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZl bC5GSU5FLCAic2xlZXBEdXJhdGlvbj0gezB9Iiwgc2xlZXBEdXJhdGlvbik7DQogICAgICAgICAg ICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoc2xlZXBEdXJh dGlvbik7DQogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGln bm9yZSkgew0KLSAgICAgICAgICAgICAgICAgICAgTE9HLmVycm9yKCJJbnRlcnJ1cHRlZEV4Y2Vw dGlvbiEhISIsIGlnbm9yZSk7DQorICAgICAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLlNF VkVSRSwgIkludGVycnVwdGVkRXhjZXB0aW9uISEhIiwgaWdub3JlKTsNCiAgICAgICAgICAgICAg ICAgfQ0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQot ICAgICAgICAgICAgTE9HLmVycm9yKCJDcml0aWMgdGhyZWFkIGtpbGxlZCBieSBleGNlcHRpb24i LCBlKTsNCisgICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwgIkNyaXRpYyB0aHJlYWQg a2lsbGVkIGJ5IGV4Y2VwdGlvbiIsIGUpOw0KICAgICAgICAgfQ0KICAgICB9DQogDQpAQCAtNDIy LDcgKzQyNCw3IEBADQogICAgICAgICBpZiAoInJlbW92ZSIuZXF1YWxzKHJlYXNvbikpIHsNCiAg ICAgICAgICAgICByZXR1cm47DQogICAgICAgICB9DQotICAgICAgICBMT0cuZGVidWcoImNyaXRp cXVlQVNBUDoiICsgZG0pOw0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiY3JpdGlxdWVB U0FQOiB7MH0iLCBkbSk7DQogICAgICAgICBpbnQgYWRkUXVldWVJbmRleCA9IGFkZFF1ZXVlLmlu ZGV4T2YoZG0pOw0KICAgICAgICAgaWYgKGFkZFF1ZXVlSW5kZXggPT0gLTEpIHsNCiAgICAgICAg ICAgICBhZGRRdWV1ZS5hZGQoZG0pOw0KQEAgLTQ1OSw3ICs0NjEsNyBAQA0KICAgICAgICAgaWYg KHBjcyA9PSBudWxsKSB7DQogICAgICAgICAgICAgcGNzID0gbmV3IFByb3BlcnR5Q2hhbmdlU3Vw cG9ydCh0aGVEZXNpZ25lcigpKTsNCiAgICAgICAgIH0NCi0gICAgICAgIExPRy5kZWJ1ZygiYWRk UHJvcGVydHlDaGFuZ2VMaXN0ZW5lcigiICsgcGNsICsgIikiKTsNCisgICAgICAgIExPRy5sb2co TGV2ZWwuRklORSwgImFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoezB9KSIsIHBjbCk7DQogICAg ICAgICBwY3MuYWRkUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihwY2wpOw0KICAgICB9DQogDQpAQCAt NDcxLDcgKzQ3Myw3IEBADQogICAgICAqLw0KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcmVtb3Zl TGlzdGVuZXIoUHJvcGVydHlDaGFuZ2VMaXN0ZW5lciBwKSB7DQogICAgICAgICBpZiAocGNzICE9 IG51bGwpIHsNCi0gICAgICAgICAgICBMT0cuZGVidWcoInJlbW92ZVByb3BlcnR5Q2hhbmdlTGlz dGVuZXIoKSIpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgInJlbW92ZVByb3Bl cnR5Q2hhbmdlTGlzdGVuZXIoKSIpOw0KICAgICAgICAgICAgIHBjcy5yZW1vdmVQcm9wZXJ0eUNo YW5nZUxpc3RlbmVyKHApOw0KICAgICAgICAgfQ0KICAgICB9DQpAQCAtNjY0LDcgKzY2Niw3IEBA DQogICAgIHB1YmxpYyBMaXN0PEdvYWw+IGdldEdvYWxMaXN0KCkgew0KICAgICAgICAgcmV0dXJu IGdvYWxzLmdldEdvYWxMaXN0KCk7DQogICAgIH0NCi0gICAgDQorDQogICAgIC8qKg0KICAgICAg KiBUaGlzIG1ldGhvZCByZXR1cm5zIHRydWUuPHA+DQogICAgICAqDQpAQCAtNjk1LDEwICs2OTcs MTAgQEANCiAgICAgLyoNCiAgICAgICogQHNlZSBvcmcuYXJnb3VtbC5jb2duaXRpdmUuUG9zdGVy I2dldFN1cHBvcnRlZERlY2lzaW9ucygpDQogICAgICAqLw0KLSAgICBwdWJsaWMgTGlzdDxEZWNp c2lvbj4gZ2V0U3VwcG9ydGVkRGVjaXNpb25zKCkgeyANCi0gICAgICAgIHJldHVybiB1bnNwZWNp ZmllZERlY2lzaW9uOyANCisgICAgcHVibGljIExpc3Q8RGVjaXNpb24+IGdldFN1cHBvcnRlZERl Y2lzaW9ucygpIHsNCisgICAgICAgIHJldHVybiB1bnNwZWNpZmllZERlY2lzaW9uOw0KICAgICB9 DQotICAgIA0KKw0KICAgICAvKg0KICAgICAgKiBAc2VlIG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5Q b3N0ZXIjc3VwcG9ydHMob3JnLmFyZ291bWwuY29nbml0aXZlLkdvYWwpDQogICAgICAqLw0KQEAg LTcwOSwxMCArNzExLDEwIEBADQogICAgIC8qDQogICAgICAqIEBzZWUgb3JnLmFyZ291bWwuY29n bml0aXZlLlBvc3RlciNnZXRTdXBwb3J0ZWRHb2FscygpDQogICAgICAqLw0KLSAgICBwdWJsaWMg TGlzdDxHb2FsPiBnZXRTdXBwb3J0ZWRHb2FscygpIHsgDQotICAgICAgICByZXR1cm4gdW5zcGVj aWZpZWRHb2FsOyANCisgICAgcHVibGljIExpc3Q8R29hbD4gZ2V0U3VwcG9ydGVkR29hbHMoKSB7 DQorICAgICAgICByZXR1cm4gdW5zcGVjaWZpZWRHb2FsOw0KICAgICB9DQotICAgIA0KKw0KICAg ICAvKg0KICAgICAgKiBAc2VlIG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5Qb3N0ZXIjY29udGFpbnNL bm93bGVkZ2VUeXBlKGphdmEubGFuZy5TdHJpbmcpDQogICAgICAqLw0KQEAgLTgzMSwyMCArODMz LDIwIEBADQogICAgIC8qDQogICAgICAqIEBzZWUgb3JnLmFyZ291bWwuY29nbml0aXZlLlBvc3Rl ciNzbm9vemUoKQ0KICAgICAgKi8NCi0gICAgcHVibGljIHZvaWQgc25vb3plKCkgeyANCisgICAg cHVibGljIHZvaWQgc25vb3plKCkgew0KICAgICAgICAgLyogZG8gbm90aGluZyAqLw0KICAgICB9 DQogDQogICAgIC8qDQogICAgICAqIEBzZWUgb3JnLmFyZ291bWwuY29nbml0aXZlLlBvc3RlciN1 bnNub296ZSgpDQogICAgICAqLw0KLSAgICBwdWJsaWMgdm9pZCB1bnNub296ZSgpIHsgDQorICAg IHB1YmxpYyB2b2lkIHVuc25vb3plKCkgew0KICAgICAgICAgLyogZG8gbm90aGluZyAqLw0KICAg ICB9DQogDQogICAgIC8qKg0KICAgICAgKiBSZXBseSB0aGUgQWdlbmN5IG9iamVjdCB0aGF0IGlz IGhlbHBpbmcgdGhpcyBEZXNpZ25lci4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEByZXR1 cm4gbXkgYWdlbmN5DQogICAgICAqLw0KICAgICBwdWJsaWMgQWdlbmN5IGdldEFnZW5jeSgpIHsN Cg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0 aXZlL1Jlc29sdmVkQ3JpdGljLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9z b3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3Vt bC9jb2duaXRpdmUvUmVzb2x2ZWRDcml0aWMuamF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZy MT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2Fy Z291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9jb2duaXRpdmUvUmVzb2x2ZWRDcml0aWMuamF2YQko b3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9jb2du aXRpdmUvUmVzb2x2ZWRDcml0aWMuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0x LDYgKzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmln aHQgKGMpIDIwMDkgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAy MDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZl ZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBt YWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vu c2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMg YXZhaWxhYmxlIGF0DQpAQCAtNDAsOCArNDAsOSBAQA0KIA0KIGltcG9ydCBqYXZhLnV0aWwuQXJy YXlMaXN0Ow0KIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dp bmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiANCi1pbXBvcnQg b3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLnV0aWwuSXRlbVVJ RDsNCiANCiAvLyBUT0RPOiBNYXliZSB0aGUgZXhjZXB0aW9uIHN0cmluZ3Mgc2hvdWxkIGJlIGlu dGVybmF0aW9uYWxpemVkDQpAQCAtNTYsNyArNTcsOCBAQA0KICAgICAvKioNCiAgICAgICogVGhl IGxvZ2dlci4NCiAgICAgICovDQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cg PSBMb2dnZXIuZ2V0TG9nZ2VyKFJlc29sdmVkQ3JpdGljLmNsYXNzKTsNCisgICAgcHJpdmF0ZSBz dGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9DQorICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKFJlc29s dmVkQ3JpdGljLmNsYXNzLmdldE5hbWUoKSk7DQogDQogICAgIC8qKg0KICAgICAgKiBUaGUgbmFt ZSBvZiB0aGUgY3JpdGljLg0KQEAgLTg0LDcgKzg2LDcgQEANCiAgICAgICAgICAgICBvZmZlbmRl cnMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCiAgICAgICAgIH0NCiAgICAgfQ0KLSAgICAN CisNCiAgICAgLyoqDQogICAgICAqIFNhbWUgYXMge0BsaW5rICNSZXNvbHZlZENyaXRpYyhDcml0 aWMsTGlzdFNldCxib29sZWFuKX0uDQogICAgICAqDQpAQCAtMTE3LDcgKzExOSw4IEBADQogCSAg ICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7DQogCX0NCiANCi0JLy9MT0cu ZGVidWcoIkFkZGluZyByZXNvbHV0aW9uIGZvcjogIiArIGMuZ2V0Q2xhc3MoKSArICIgIiArIGNh bkNyZWF0ZSk7DQorICAgICAgICAvLyBMT0cubG9nKExldmVsLkZJTkUsDQorICAgICAgICAvLyAg ICAgICAgICJBZGRpbmcgcmVzb2x1dGlvbiBmb3I6ICIgKyBjLmdldENsYXNzKCkgKyAiICIgKyBj YW5DcmVhdGUpOw0KIA0KIAl0cnkgew0KIAkgICAgaWYgKG9mZnMgIT0gbnVsbCAmJiBvZmZzLnNp emUoKSA+IDApIHsNCkBAIC0yNjQsNyArMjY3LDggQEANCiAJCSAgICBmYWlsID0gZmFpbCArICIs ICIgKyBvYmouZ2V0Q2xhc3MoKS50b1N0cmluZygpOw0KIAkJfQ0KIA0KLQkJTE9HLndhcm4oIk9m ZmVuZGVyICIgKyBvYmouZ2V0Q2xhc3MoKSArICIgdW5yZXNvbHZhYmxlIik7DQorICAgICAgICAg ICAgICAgIExPRy5sb2coTGV2ZWwuV0FSTklORywNCisgICAgICAgICAgICAgICAgICAgICAgICAi T2ZmZW5kZXIgezB9IHVucmVzb2x2YWJsZSIsIG9iai5nZXRDbGFzcygpKTsNCiANCiAJCS8vIFVz ZSB0aGlzIGZvciBmYXN0IGZhaWwgaW5zdGVhZC4NCiAJCS8vIFNhY3JpZmljZWQgZm9yIGNvbXBs ZXRlIGZhaWwuIGQwMG1zdA0KQEAgLTMxOCw0ICszMjIsMyBAQA0KIAlyZXR1cm4gc2IudG9TdHJp bmcoKTsNCiAgICAgfQ0KIH0NCi0NCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9z cmMvb3JnL2FyZ291bWwvY29nbml0aXZlL1RvRG9JdGVtLmphdmENClVybDogaHR0cDovL2FyZ291 bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBw L3NyYy9vcmcvYXJnb3VtbC9jb2duaXRpdmUvVG9Eb0l0ZW0uamF2YT92aWV3PWRpZmYmcGF0aHJl dj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1 bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9jb2duaXRpdmUvVG9Eb0l0ZW0uamF2 YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9j b2duaXRpdmUvVG9Eb0l0ZW0uamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYg KzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQg KGMpIDIwMDkgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5 LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4g VGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRl IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ug djEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZh aWxhYmxlIGF0DQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdv dW1sL2NvZ25pdGl2ZS9Ub0RvTGlzdC5qYXZhDQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5v cmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2Fy Z291bWwvY29nbml0aXZlL1RvRG9MaXN0LmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9 MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdv dW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL1RvRG9MaXN0LmphdmEJKG9yaWdpbmFs KQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL1Rv RG9MaXN0LmphdmEJMjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMSw2ICsxLDYgQEANCiAv KiAkSWQkDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAg Q29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTIgQ29u dHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9n cmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJs ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAq IHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0 DQpAQCAtNDcsMjEgKzQ3LDIyIEBADQogaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KIGltcG9ydCBq YXZhLnV0aWwuT2JzZXJ2YWJsZTsNCiBpbXBvcnQgamF2YS51dGlsLlNldDsNCitpbXBvcnQgamF2 YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsN CiANCiBpbXBvcnQgamF2YXguc3dpbmcuZXZlbnQuRXZlbnRMaXN0ZW5lckxpc3Q7DQogDQotaW1w b3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5pMThuLlRy YW5zbGF0b3I7DQogaW1wb3J0IG9yZy5hcmdvdW1sLm1vZGVsLkludmFsaWRFbGVtZW50RXhjZXB0 aW9uOw0KIA0KIC8qKg0KICAqIEltcGxlbWVudHMgYSBsaXN0IG9mIFRvRG9JdGVtJ3MuDQogICog PHA+DQotICogDQorICoNCiAgKiBJdCBzcGF3bnMgYSAic3dlZXBlciIgdGhyZWFkIHRoYXQgcGVy aW9kaWNhbGx5IGdvZXMgdGhyb3VnaCB0aGUgbGlzdCBhbmQNCiAgKiBlbGltaW5hdGVzIFRvRG9J dGVtJ3MgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkLg0KICAqIDxwPg0KLSAqIA0KKyAqDQogICog T25lIGRpZmZpY3VsdHkgZGVzaWduZXJzIGZhY2UgaXMga2VlcGluZyB0cmFjayBvZiBhbGwgdGhl IG15cmlhZCBkZXRhaWxzIG9mDQogICogdGhlaXIgdGFzay4gSXQgaXMgYWxsIHRvbyBlYXN5IHRv IHNraXAgYSBzdGVwIGluIHRoZSBkZXNpZ24gcHJvY2VzcywgbGVhdmUNCiAgKiBwYXJ0IG9mIHRo ZSBkZXNpZ24gdW5zcGVjaWZpZWQsIG9yIG1ha2UgYSBtaXN0YWtlIHRoYXQgcmVxdWlyZXMgcmV2 aXNpb24uDQpAQCAtNzIsMTMgKzczLDEzIEBADQogICogbGlzdCBwYW5lIGFsbG93IHRoZSBkZXNp Z25lciB0byBvcmdhbml6ZSBpdGVtcyBpbiBkaWZmZXJlbnQgd2F5czogYnkNCiAgKiBwcmlvcml0 eSwgYnkgZGVjaXNpb24gc3VwcG9ydGVkLCBieSBvZmZlbmRpbmcgZGVzaWduIGVsZW1lbnQsIGV0 Yy4NCiAgKiA8cD4NCi0gKiANCisgKg0KICAqIEl0ZW1zIGFyZSBzaG93biB1bmRlciBhbGwgYXBw bGljYWJsZSBoZWFkaW5ncy4NCiAgKiA8cD4NCi0gKiANCisgKg0KICAqIFRoaXMgY2xhc3MgaXMg ZGVwZW5kZW50IG9uIERlc2lnbmVyLg0KICAqIDxwPg0KLSAqIA0KKyAqDQogICogQHNlZSBEZXNp Z25lciNpbmZvcm0NCiAgKiBAYXV0aG9yIEphc29uIFJvYmJpbnMNCiAgKi8NCkBAIC04Niw3ICs4 Nyw4IEBADQogICAgIC8qKg0KICAgICAgKiBMb2dnZXIuDQogICAgICAqLw0KLSAgICBwcml2YXRl IHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyLmdldExvZ2dlcihUb0RvTGlzdC5jbGFz cyk7DQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KKyAgICAgICAgTG9n Z2VyLmdldExvZ2dlcihUb0RvTGlzdC5jbGFzcy5nZXROYW1lKCkpOw0KIA0KICAgICAvKioNCiAg ICAgICogTnVtYmVyIG9mIHNlY29uZHMgdGhyZWFkIHNob3VsZCBzbGVlcCBiZXR3ZWVuIHBhc3Nl cw0KQEAgLTk5LDkgKzEwMSw5IEBADQogICAgIHByaXZhdGUgTGlzdDxUb0RvSXRlbT4gaXRlbXM7 DQogDQogICAgIHByaXZhdGUgU2V0PFRvRG9JdGVtPiBpdGVtU2V0Ow0KLSAgICANCisNCiAgICAg LyoqDQotICAgICAqIFRoZXNlIGFyZSBjb21wdXRlZCB3aGVuIG5lZWRlZC4gDQorICAgICAqIFRo ZXNlIGFyZSBjb21wdXRlZCB3aGVuIG5lZWRlZC4NCiAgICAgICovDQogICAgIC8vIFRPRE86IE9m ZmVuZGVycyBuZWVkIHRvIGJlIG1vcmUgc3Ryb25nbHkgdHlwZWQuIC0gdGZtIDIwMDcwNjMwDQog ICAgIHByaXZhdGUgdm9sYXRpbGUgTGlzdFNldCBhbGxPZmZlbmRlcnM7DQpAQCAtMTQwLDcgKzE0 Miw3IEBADQogICAgICAqICh3YWl0aW5nKS4NCiAgICAgICovDQogICAgIHByaXZhdGUgYm9vbGVh biBpc1BhdXNlZDsNCi0gICAgDQorDQogICAgIHByaXZhdGUgT2JqZWN0IHBhdXNlZE11dGV4ID0g bmV3IE9iamVjdCgpOw0KIA0KICAgICAvKioNCkBAIC0xNTAsNyArMTUyLDcgQEANCiANCiAgICAg ICAgIGl0ZW1zID0gQ29sbGVjdGlvbnMuc3luY2hyb25pemVkTGlzdChuZXcgQXJyYXlMaXN0PFRv RG9JdGVtPigxMDApKTsNCiAgICAgICAgIGl0ZW1TZXQgPSBDb2xsZWN0aW9ucy5zeW5jaHJvbml6 ZWRTZXQobmV3IEhhc2hTZXQ8VG9Eb0l0ZW0+KDEwMCkpOw0KLSAgICAgICAgcmVzb2x2ZWRJdGVt cyA9IA0KKyAgICAgICAgcmVzb2x2ZWRJdGVtcyA9DQogICAgICAgICAgICAgQ29sbGVjdGlvbnMu c3luY2hyb25pemVkU2V0KG5ldyBMaW5rZWRIYXNoU2V0PFJlc29sdmVkQ3JpdGljPigxMDApKTsN CiAgICAgICAgIGxpc3RlbmVyTGlzdCA9IG5ldyBFdmVudExpc3RlbmVyTGlzdCgpOw0KICAgICAg ICAgbG9uZ2VzdFRvRG9MaXN0ID0gMDsNCkBAIC0xNTksNyArMTYxLDcgQEANCiANCiAgICAgLyoq DQogICAgICAqIFN0YXJ0IGEgVGhyZWFkIHRvIGRlbGV0ZSBvbGQgaXRlbXMgZnJvbSB0aGUgVG9E b0xpc3QuDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAcGFyYW0gZCB0aGUgZGVzaWduZXIN CiAgICAgICovDQogICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzcGF3blZhbGlkaXR5Q2hl Y2tlcihEZXNpZ25lciBkKSB7DQpAQCAtMTc3LDcgKzE3OSw3IEBADQogICAgICAqLw0KICAgICBw dWJsaWMgdm9pZCBydW4oKSB7DQogICAgICAgICBmaW5hbCBMaXN0PFRvRG9JdGVtPiByZW1vdmVz ID0gbmV3IEFycmF5TGlzdDxUb0RvSXRlbT4oKTsNCi0gICAgICAgIA0KKw0KICAgICAgICAgd2hp bGUgKHRydWUpIHsNCiANCiAgICAgICAgICAgICAvLyB0aGUgdmFsaWRpdHkgY2hlY2tpbmcgdGhy ZWFkIHNob3VsZCB3YWl0IGlmIGRpc2FibGVkLg0KQEAgLTE4Niw3ICsxODgsNyBAQA0KICAgICAg ICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXVzZWRNdXRl eC53YWl0KCk7DQogICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2Vw dGlvbiBpZ25vcmUpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBMT0cuZXJyb3IoIkludGVy cnVwdGVkRXhjZXB0aW9uISEhIiwgaWdub3JlKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBM T0cubG9nKExldmVsLlNFVkVSRSwgIkludGVycnVwdGVkRXhjZXB0aW9uISEhIiwgaWdub3JlKTsN CiAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg IH0NCkBAIC0xOTYsNyArMTk4LDcgQEANCiAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAg ICAgICBUaHJlYWQuc2xlZXAoU0xFRVBfU0VDT05EUyAqIDEwMDApOw0KICAgICAgICAgICAgIH0g Y2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGlnbm9yZSkgew0KLSAgICAgICAgICAgICAgICBM T0cuZXJyb3IoIkludGVycnVwdGVkRXhjZXB0aW9uISEhIiwgaWdub3JlKTsNCisgICAgICAgICAg ICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsICJJbnRlcnJ1cHRlZEV4Y2VwdGlvbiEhISIsIGln bm9yZSk7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KICAgICB9DQpAQCAtMjE4LDEwICsy MjAsMTAgQEANCiAgICAgICogVmFsaWRpdHlDaGVja2luZ1RocmVhZCwgYW5kIGl0IGNhbiBiZSBj YWxsZWQgYnkgdGhlIHVzZXIgcHJlc3NpbmcgYQ0KICAgICAgKiBidXR0b24gdmlhIGZvcmNlVmFs aWRpdHlDaGVjaygpLg0KICAgICAgKiA8cD4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIDxl bT5XYXJuaW5nOiBGcmFnaWxlIGNvZGUhPC9lbT4gTm8gbWV0aG9kIHRoYXQgdGhpcyBtZXRob2Qg Y2FsbHMgY2FuDQogICAgICAqIHN5bmNocm9uaXplZCB0aGUgRGVzaWduZXIsIG90aGVyd2lzZSB0 aGVyZSB3aWxsIGJlIGRlYWRsb2NrLg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFt IHJlbW92ZXMgYSBsaXN0IGNvbnRhaW5pbmcgdGhlIGl0ZW1zIHRvIGJlIHJlbW92ZWQNCiAgICAg ICovDQogICAgIHByaXZhdGUgc3luY2hyb25pemVkIHZvaWQgZm9yY2VWYWxpZGl0eUNoZWNrKA0K QEAgLTI0MCw3ICsyNDIsNyBAQA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXhjZXB0 aW9uIHJhaXNlZCBpbiBUb0RvIGxpc3QgY2xlYW5pbmciKTsNCiAgICAgICAgICAgICAgICAgICAg IGJ1Zi5hcHBlbmQoIlxuIik7DQogICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKGl0ZW0u dG9TdHJpbmcoKSk7DQotICAgICAgICAgICAgICAgICAgICBMT0cuZXJyb3IoYnVmLnRvU3RyaW5n KCksIGV4KTsNCisgICAgICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLGJ1Zi50 b1N0cmluZygpLCBleCk7DQogICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgaWYg KCF2YWxpZCkgew0KICAgICAgICAgICAgICAgICAgICAgbnVtTm90VmFsaWQrKzsNCkBAIC0yOTEs NyArMjkzLDcgQEANCiANCiAgICAgLyoqDQogICAgICAqIHNldHMgdGhlIHBhdXNlIHN0YXRlLg0K LSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIHBhdXNlZCBpZiBzZXQgdG8gZmFsc2Us IGNhbGxzIHJlc3VtZSgpIGFsc28gdG8gc3RhcnQgd29ya2luZw0KICAgICAgKi8NCiAgICAgcHVi bGljIHZvaWQgc2V0UGF1c2VkKGJvb2xlYW4gcGF1c2VkKSB7DQpAQCAtMzc0LDcgKzM3Niw3IEBA DQogDQogICAgIC8qKg0KICAgICAgKiBAcmV0dXJuIHRoZSBzZXQgb2Ygb2ZmZW5kZXJzDQotICAg ICAqIA0KKyAgICAgKg0KICAgICAgKiBUT0RPOiBUaGUgcmV0dXJuIHZhbHVlIG5lZWRzIHRvIGJl IG1vcmUgc3Ryb25nbHkgdHlwZWQuIC0gdGZtIC0gMjAwNzA2MzANCiAgICAgICovDQogICAgIHB1 YmxpYyBMaXN0U2V0IGdldE9mZmVuZGVycygpIHsNCkBAIC00NTksNyArNDYxLDcgQEANCiAgICAg ICAgICAgICAgICAgLy8gY2F0LmRlYnVnKCJDaGVja2luZyBmb3IgaW5oaWJpdG9ycyAiICsgcmMp Ow0KICAgICAgICAgICAgICAgICB3aGlsZSAoZWxlbXMuaGFzTmV4dCgpKSB7DQogICAgICAgICAg ICAgICAgICAgICBpZiAoZWxlbXMubmV4dCgpLmVxdWFscyhyYykpIHsNCi0gICAgICAgICAgICAg ICAgICAgICAgICBMT0cuZGVidWcoIlRvRG9JdGVtIG5vdCBhZGRlZCBiZWNhdXNlIGl0IHdhcyBy ZXNvbHZlZCIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwg IlRvRG9JdGVtIG5vdCBhZGRlZCBiZWNhdXNlIGl0IHdhcyByZXNvbHZlZCIpOw0KICAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg ICAgICAgICAgfQ0KQEAgLTU3MCw3ICs1NzIsNyBAQA0KIA0KICAgICAvKioNCiAgICAgICogQWRk IHRoZSBnaXZlbiByZXNvbHZlZCBjcml0aWMgdG8gdGhlIGxpc3Qgb2YgcmVzb2x2ZWQgY3JpdGlj cy4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSByYyB0aGUgcmVzb2x2ZWQgY3Jp dGljDQogICAgICAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgc3VjY2Vzc2Z1bGx5IGFk ZGVkOyA8Y29kZT5mYWxzZTwvY29kZT4NCiAgICAgICogICAgICAgICBvdGhlcndpc2UNCkBAIC01 ODMsNyArNTg1LDcgQEANCiAgICAgICogUmVtb3ZlIGFsbCB0b2RvIGl0ZW1zLg0KICAgICAgKi8N CiAgICAgcHVibGljIHZvaWQgcmVtb3ZlQWxsRWxlbWVudHMoKSB7DQotICAgICAgICBMT0cuZGVi dWcoInJlbW92aW5nIGFsbCB0b2RvIGl0ZW1zIik7DQorICAgICAgICBMT0cubG9nKExldmVsLkZJ TkUsICJyZW1vdmluZyBhbGwgdG9kbyBpdGVtcyIpOw0KICAgICAgICAgTGlzdDxUb0RvSXRlbT4g b2xkSXRlbXMgPSBuZXcgQXJyYXlMaXN0PFRvRG9JdGVtPihpdGVtcyk7DQogICAgICAgICBpdGVt cy5jbGVhcigpOw0KICAgICAgICAgaXRlbVNldC5jbGVhcigpOw0KQEAgLTY1NCw3ICs2NTYsNyBA QA0KICAgICAgKiBAcGFyYW0gbCB0aGUgbGlzdGVuZXIgdG8gYmUgYWRkZWQNCiAgICAgICovDQog ICAgIHB1YmxpYyB2b2lkIGFkZFRvRG9MaXN0TGlzdGVuZXIoVG9Eb0xpc3RMaXN0ZW5lciBsKSB7 DQotICAgICAgICAvLyBFdmVudExpc3RlbmVyTGlzdC5hZGQoKSBpcyBzeW5jaHJvbml6ZWQsIHNv IHdlIGRvbid0IG5lZWQgdG8gDQorICAgICAgICAvLyBFdmVudExpc3RlbmVyTGlzdC5hZGQoKSBp cyBzeW5jaHJvbml6ZWQsIHNvIHdlIGRvbid0IG5lZWQgdG8NCiAgICAgICAgIC8vIHN5bmNocm9u aXplIG91cnNlbHZlcw0KICAgICAgICAgbGlzdGVuZXJMaXN0LmFkZChUb0RvTGlzdExpc3RlbmVy LmNsYXNzLCBsKTsNCiAgICAgfQ0KQEAgLTY2Myw3ICs2NjUsNyBAQA0KICAgICAgKiBAcGFyYW0g bCB0aGUgbGlzdGVuZXIgdG8gYmUgcmVtb3ZlZA0KICAgICAgKi8NCiAgICAgcHVibGljIHZvaWQg cmVtb3ZlVG9Eb0xpc3RMaXN0ZW5lcihUb0RvTGlzdExpc3RlbmVyIGwpIHsNCi0gICAgICAgIC8v IEV2ZW50TGlzdGVuZXJMaXN0LnJlbW92ZSgpIGlzIHN5bmNocm9uaXplZCwgc28gd2UgZG9uJ3Qg bmVlZCB0byANCisgICAgICAgIC8vIEV2ZW50TGlzdGVuZXJMaXN0LnJlbW92ZSgpIGlzIHN5bmNo cm9uaXplZCwgc28gd2UgZG9uJ3QgbmVlZCB0bw0KICAgICAgICAgLy8gc3luY2hyb25pemUgb3Vy c2VsdmVzDQogICAgICAgICBsaXN0ZW5lckxpc3QucmVtb3ZlKFRvRG9MaXN0TGlzdGVuZXIuY2xh c3MsIGwpOw0KICAgICB9DQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29y Zy9hcmdvdW1sL2NvZ25pdGl2ZS9jaGVja2xpc3QvQ2hlY2tNYW5hZ2VyLmphdmENClVybDogaHR0 cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2Fy Z291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9jb2duaXRpdmUvY2hlY2tsaXN0L0NoZWNrTWFuYWdl ci5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1s L2NvZ25pdGl2ZS9jaGVja2xpc3QvQ2hlY2tNYW5hZ2VyLmphdmEJKG9yaWdpbmFsKQ0KKysrIHRy dW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL2NoZWNrbGlzdC9D aGVja01hbmFnZXIuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBA QA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIw MDkgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIg Q29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBw cm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWls YWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0K ICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxl IGF0DQpAQCAtMzksOCArMzksOCBAQA0KIHBhY2thZ2Ugb3JnLmFyZ291bWwuY29nbml0aXZlLmNo ZWNrbGlzdDsNCiANCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7DQotaW1wb3J0IGphdmEu dXRpbC5IYXNodGFibGU7DQogaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsNCitpbXBvcnQg amF2YS51dGlsLkhhc2h0YWJsZTsNCiANCiAvKioNCiAgKiBUaGUgQ2hlY2tNYW5hZ2VyIGtlZXBz IHRyYWNrIG9mIHdoaWNoIENoZWNrbGlzdHMgc2hvdWxkIGJlDQoNCk1vZGlmaWVkOiB0cnVuay9z cmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2NvZ25pdGl2ZS9jaGVja2xpc3QvdWkvVGFi Q2hlY2tsaXN0LmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJv d3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9jb2duaXRp dmUvY2hlY2tsaXN0L3VpL1RhYkNoZWNrbGlzdC5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3 JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMv YXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2NvZ25pdGl2ZS9jaGVja2xpc3QvdWkvVGFiQ2hl Y2tsaXN0LmphdmEJKG9yaWdpbmFsKQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3Jn L2FyZ291bWwvY29nbml0aXZlL2NoZWNrbGlzdC91aS9UYWJDaGVja2xpc3QuamF2YQkyMDEyLTEy LTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0b3JzIC0gc2VlIGJl bG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93 DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55 aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRo aXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNDgsNiArNDgsOCBAQA0K IGltcG9ydCBqYXZhLmJlYW5zLlByb3BlcnR5Q2hhbmdlRXZlbnQ7DQogaW1wb3J0IGphdmEuYmVh bnMuUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcjsNCiBpbXBvcnQgamF2YS5iZWFucy5WZXRvYWJsZUNo YW5nZUxpc3RlbmVyOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQg amF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KIA0KIGltcG9ydCBqYXZheC5zd2luZy5KTGFiZWw7 DQogaW1wb3J0IGphdmF4LnN3aW5nLkpTY3JvbGxQYW5lOw0KQEAgLTU4LDcgKzYwLDYgQEANCiBp bXBvcnQgamF2YXguc3dpbmcudGFibGUuQWJzdHJhY3RUYWJsZU1vZGVsOw0KIGltcG9ydCBqYXZh eC5zd2luZy50YWJsZS5UYWJsZUNvbHVtbjsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5M b2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmFwcGxpY2F0aW9uLmFwaS5BYnN0cmFjdEFyZ29K UGFuZWw7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5UcmFuc2xhdG9yOw0KIGltcG9y dCBvcmcuYXJnb3VtbC5jb2duaXRpdmUuY2hlY2tsaXN0LkNoZWNrSXRlbTsNCkBAIC0xMTksNyAr MTIwLDcgQEANCiAJYWRkKG5ldyBKTGFiZWwoVHJhbnNsYXRvci5sb2NhbGl6ZSgidGFiLmNoZWNr bGlzdC53YXJuaW5nIikpLA0KIAkgICAgQm9yZGVyTGF5b3V0Lk5PUlRIKTsNCiAJYWRkKHNwLCBC b3JkZXJMYXlvdXQuQ0VOVEVSKTsNCi0JDQorDQogCWFkZENvbXBvbmVudExpc3RlbmVyKHRoaXMp Ow0KICAgICB9DQogDQpAQCAtMjc2LDcgKzI3Nyw3IEBADQogICAgICAgICAvLyBVcGRhdGUgb3Vy IG1vZGVsIHdpdGggb3VyIHNhdmVkIHRhcmdldA0KICAgICAgICAgc2V0VGFyZ2V0SW50ZXJuYWwo dGFyZ2V0KTsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgLyoNCiAgICAgICogQHNlZSBqYXZhLmF3 dC5ldmVudC5Db21wb25lbnRMaXN0ZW5lciNjb21wb25lbnRIaWRkZW4oamF2YS5hd3QuZXZlbnQu Q29tcG9uZW50RXZlbnQpDQogICAgICAqLw0KQEAgLTMwNyw3ICszMDgsNyBAQA0KICAgICAgKiBM b2dnZXIuDQogICAgICAqLw0KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0N Ci0gICAgICAgIExvZ2dlci5nZXRMb2dnZXIoVGFibGVNb2RlbENoZWNrbGlzdC5jbGFzcyk7DQor ICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKFRhYmxlTW9kZWxDaGVja2xpc3QuY2xhc3MuZ2V0TmFt ZSgpKTsNCiANCiAgICAgLy8vLy8vLy8vLy8vLy8vLw0KICAgICAvLyBpbnN0YW5jZSB2YXJhYmxl cw0KQEAgLTM1MCw3ICszNTEsNyBAQA0KIA0KICAgICAvLy8vLy8vLy8vLy8vLy8vDQogICAgIC8v IFRhYmxlTW9kZWwgaW1wbGVtZXRhdGlvbg0KLSAgICANCisNCiAgICAgLyoNCiAgICAgICogQHNl ZSBqYXZheC5zd2luZy50YWJsZS5UYWJsZU1vZGVsI2dldENvbHVtbkNvdW50KCkNCiAgICAgICov DQpAQCAtNDMxLDcgKzQzMiw5IEBADQogICAgICAqLw0KICAgICBAT3ZlcnJpZGUNCiAgICAgcHVi bGljIHZvaWQgc2V0VmFsdWVBdChPYmplY3QgYVZhbHVlLCBpbnQgcm93SW5kZXgsIGludCBjb2x1 bW5JbmRleCkgIHsNCi0JTE9HLmRlYnVnKCJzZXR0aW5nIHRhYmxlIHZhbHVlICIgKyByb3dJbmRl eCArICIsICIgKyBjb2x1bW5JbmRleCk7DQorICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsDQor ICAgICAgICAgICAgICAgICJzZXR0aW5nIHRhYmxlIHZhbHVlIHswfSwgezF9IiwNCisgICAgICAg ICAgICAgICAgbmV3IE9iamVjdFtde3Jvd0luZGV4LCBjb2x1bW5JbmRleH0pOw0KIAlpZiAoY29s dW1uSW5kZXggIT0gMCkgew0KIAkgICAgcmV0dXJuOw0KIAl9DQpAQCAtNDc2LDQgKzQ3OSw0IEBA DQogICAgICAgICBmaXJlVGFibGVTdHJ1Y3R1cmVDaGFuZ2VkKCk7DQogICAgICAgICBwYW5lbC5y ZXNpemVDb2x1bW5zKCk7DQogICAgIH0NCi19IA0KK30NCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9h cmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL2NyaXRpY3MvU25vb3plT3JkZXIu amF2YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3Vt bC90cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2NvZ25pdGl2ZS9jcml0aWNz L1Nub296ZU9yZGVyLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5 MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMv b3JnL2FyZ291bWwvY29nbml0aXZlL2NyaXRpY3MvU25vb3plT3JkZXIuamF2YQkob3JpZ2luYWwp DQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9jb2duaXRpdmUvY3Jp dGljcy9Tbm9vemVPcmRlci5qYXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiAr MSw2IEBADQogLyogJElkJA0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAo YykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkt MjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBU aGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUg YXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2 MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFp bGFibGUgYXQNCkBAIC00MCw4ICs0MCw4IEBADQogDQogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXph YmxlOw0KIGltcG9ydCBqYXZhLnV0aWwuRGF0ZTsNCi0NCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0 ai5Mb2dnZXI7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZh LnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQogLyoqDQogICogQSBDcml0aWMgY2FuIGJlIGRpc2Fi bGVkIGZvciBhIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUgYnkgZ2l2aW5nIGl0DQpAQCAtNTksNyAr NTksOCBAQA0KICAgICAvKioNCiAgICAgICogTG9nZ2VyLg0KICAgICAgKi8NCi0gICAgcHJpdmF0 ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoU25vb3plT3JkZXIu Y2xhc3MpOw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCisgICAgICAg IExvZ2dlci5nZXRMb2dnZXIoU25vb3plT3JkZXIuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAg Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLw0KICAgICAvLyBjb25zdGFudHMNCkBAIC0xNDEsNyArMTQyLDcgQEANCiAJbG9uZyBu ID0gKGdldE5vdygpKS5nZXRUaW1lKCk7DQogCXNub296ZVVudGlsLnNldFRpbWUobiArIGludGVy dmFsKTsNCiAJc25vb3plQWdhaW4uc2V0VGltZShuICsgaW50ZXJ2YWwgKyBJTklUSUFMX0lOVEVS VkFMX01TKTsNCi0JTE9HLmluZm8oIlNldHRpbmcgc25vb3plIG9yZGVyIHRvOiAiICsgc25vb3pl VW50aWwudG9TdHJpbmcoKSk7DQorCUxPRy5sb2coTGV2ZWwuSU5GTywgIlNldHRpbmcgc25vb3pl IG9yZGVyIHRvOiB7MH0iLCBzbm9vemVVbnRpbCk7DQogICAgIH0NCiANCiAgICAgLyoqDQoNCk1v ZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2NvZ25pdGl2ZS9j cml0aWNzL3VpL0NyaXRpY0Jyb3dzZXJEaWFsb2cuamF2YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50 aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9zcmMvYXJnb3VtbC1hcHAvc3Jj L29yZy9hcmdvdW1sL2NvZ25pdGl2ZS9jcml0aWNzL3VpL0NyaXRpY0Jyb3dzZXJEaWFsb2cuamF2 YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9jb2du aXRpdmUvY3JpdGljcy91aS9Dcml0aWNCcm93c2VyRGlhbG9nLmphdmEJKG9yaWdpbmFsKQ0KKysr IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL2NyaXRpY3Mv dWkvQ3JpdGljQnJvd3NlckRpYWxvZy5qYXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAg LTEsNiArMSw2IEBADQogLyogJElkJA0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHly aWdodCAoYykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMp IDIwMDktMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2Vy dmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJl IG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGlj ZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBp cyBhdmFpbGFibGUgYXQNCkBAIC01MCw2ICs1MCw4IEBADQogaW1wb3J0IGphdmEuYXd0LmV2ZW50 Lkl0ZW1MaXN0ZW5lcjsNCiBpbXBvcnQgamF2YS51dGlsLk9ic2VydmFibGU7DQogaW1wb3J0IGph dmEudXRpbC5PYnNlcnZlcjsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1w b3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiANCiBpbXBvcnQgamF2YXguc3dpbmcuQm9y ZGVyRmFjdG9yeTsNCiBpbXBvcnQgamF2YXguc3dpbmcuSkJ1dHRvbjsNCkBAIC02Nyw3ICs2OSw2 IEBADQogaW1wb3J0IGphdmF4LnN3aW5nLmV2ZW50LlRhYmxlTW9kZWxMaXN0ZW5lcjsNCiBpbXBv cnQgamF2YXguc3dpbmcudGV4dC5Eb2N1bWVudDsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0 ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5Dcml0aWM7DQogaW1wb3J0 IG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5Ub0RvSXRlbTsNCiBpbXBvcnQgb3JnLmFyZ291bWwuY29n bml0aXZlLlRyYW5zbGF0b3I7DQpAQCAtODksNyArOTAsNyBAQA0KICAgICAgICAgICAgICAgIFRh YmxlTW9kZWxMaXN0ZW5lciwNCiAgICAgICAgICAgICAgICBPYnNlcnZlciB7DQogICAgIHByaXZh dGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KLQlMb2dnZXIuZ2V0TG9nZ2VyKENyaXRpY0Jy b3dzZXJEaWFsb2cuY2xhc3MpOw0KKyAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihDcml0aWNCcm93 c2VyRGlhbG9nLmNsYXNzLmdldE5hbWUoKSk7DQogDQogICAgIHByaXZhdGUgc3RhdGljIGludCBu dW1Dcml0aWNCcm93c2VyID0gMDsNCiANCkBAIC0xNjcsMTEgKzE2OCwxMSBAQA0KIAlKUGFuZWwg bWFpbkNvbnRlbnQgPSBuZXcgSlBhbmVsKCk7DQogCW1haW5Db250ZW50LnNldExheW91dChuZXcg Qm9yZGVyTGF5b3V0KDEwLCAxMCkpOw0KICAgICAgICAgQm9yZGVyU3BsaXRQYW5lIGJzcCA9IG5l dyBCb3JkZXJTcGxpdFBhbmUoKTsNCi0gICAgICAgDQorDQogCS8vIENyaXRpY3MgVGFibGUNCiAJ SlBhbmVsIHRhYmxlUGFuZWwgPSBuZXcgSlBhbmVsKG5ldyBCb3JkZXJMYXlvdXQoNSwgNSkpOw0K ICAgICAgICAgdGFibGUgPSBuZXcgVGFibGVDcml0aWNzKG5ldyBUYWJsZU1vZGVsQ3JpdGljcyhm YWxzZSksIHRoaXMsIHRoaXMpOw0KLSAgICAgICAgY3JpdGljc0xhYmVsLnNldFRleHQoY3JpdGlj c0xhYmVsLmdldFRleHQoKSArICIgKCIgDQorICAgICAgICBjcml0aWNzTGFiZWwuc2V0VGV4dChj cml0aWNzTGFiZWwuZ2V0VGV4dCgpICsgIiAoIg0KICAgICAgICAgICAgICAgICArIHRhYmxlLmdl dE1vZGVsKCkuZ2V0Um93Q291bnQoKSArICIpIik7DQogICAgICAgICB0YWJsZVBhbmVsLmFkZChj cml0aWNzTGFiZWwsIEJvcmRlckxheW91dC5OT1JUSCk7DQogCUpTY3JvbGxQYW5lIHRhYmxlU1Ag PSBuZXcgSlNjcm9sbFBhbmUodGFibGUpOw0KQEAgLTE4MSwxMyArMTgyLDEzIEBADQogCS8vIGlz IHVzZWQgaW4gcGFjaygpDQogCXRhYmxlU1Auc2V0UHJlZmVycmVkU2l6ZSh0YWJsZS5nZXRJbml0 aWFsU2l6ZSgpKTsNCiAgICAgICAgIGJzcC5hZGQodGFibGVQYW5lbCwgQm9yZGVyU3BsaXRQYW5l LkNFTlRFUik7DQotICAgICAgICANCisNCiAJLy8gQ3JpdGljIERldGFpbHMgcGFuZWwNCiAgICAg ICAgIEpQYW5lbCBkZXRhaWxzUGFuZWwgPSBuZXcgSlBhbmVsKG5ldyBHcmlkQmFnTGF5b3V0KCkp Ow0KICAgICAgICAgZGV0YWlsc1BhbmVsLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZVRp dGxlZEJvcmRlcigNCiAgICAgICAgICAgICAgICAgVHJhbnNsYXRvci5sb2NhbGl6ZSgNCiAgICAg ICAgICAgICAgICAgICAgICAgICAiZGlhbG9nLmJyb3dzZS50aXRsZWQtYm9yZGVyLmNyaXRpYy1k ZXRhaWxzIikpKTsNCi0gICAgICAgIA0KKw0KIAlHcmlkQmFnQ29uc3RyYWludHMgbGFiZWxDb25z dHJhaW50cyA9IG5ldyBHcmlkQmFnQ29uc3RyYWludHMoKTsNCiAJbGFiZWxDb25zdHJhaW50cy5h bmNob3IgPSBHcmlkQmFnQ29uc3RyYWludHMuRUFTVDsNCiAgICAgICAgIGxhYmVsQ29uc3RyYWlu dHMuZmlsbCA9IEdyaWRCYWdDb25zdHJhaW50cy5CT1RIOw0KQEAgLTI3NSw3ICsyNzYsNyBAQA0K IAlkZXRhaWxzUGFuZWwuYWRkKG5ldyBKTGFiZWwoIiIpLCBsYWJlbENvbnN0cmFpbnRzKTsNCiAJ ZGV0YWlsc1BhbmVsLmFkZChidXR0b25QYW5lbCwgZmllbGRDb25zdHJhaW50cyk7DQogICAgICAg ICBic3AuYWRkKGRldGFpbHNQYW5lbCwgQm9yZGVyU3BsaXRQYW5lLkVBU1QpOw0KLSAgICAgICAg DQorDQogCXRoaXMuYWRkTGlzdGVuZXJzKCk7DQogICAgICAgICB0aGlzLmVuYWJsZUZpZWxkc0Fu ZEJ1dHRvbnMoKTsNCiANCkBAIC0zMDQsNyArMzA1LDcgQEANCiAgICAgICAgIHByaW9yaXR5LnNl dEVuYWJsZWQoZmFsc2UpOw0KICAgICAgICAgZGVzYy5zZXRFZGl0YWJsZShmYWxzZSk7DQogICAg ICAgICBtb3JlSW5mby5zZXRFZGl0YWJsZShmYWxzZSk7DQotICAgICAgICANCisNCiAgICAgICAg IGdvQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOw0KICAgICAgICAgd2FrZUJ1dHRvbi5zZXRFbmFi bGVkKGZhbHNlKTsNCiAgICAgICAgIGFkdmFuY2VkQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7DQpA QCAtMzE0LDcgKzMxNSw3IEBADQogICAgICAgICB1c2VDbGFyLnNldFNlbGVjdGVkSXRlbShudWxs KTsNCiAgICAgICAgIHVzZUNsYXIucmVwYWludCgpOw0KICAgICB9DQotICAgIA0KKw0KICAgICAv KioNCiAgICAgICogQHBhcmFtIHQgdGhlIG5ldyB0YXJnZXQNCiAgICAgICovDQpAQCAtMzU1LDE1 ICszNTYsMTUgQEANCiAgICAgICovDQogICAgIHByb3RlY3RlZCB2b2lkIHVwZGF0ZUJ1dHRvbnNF bmFibGVkKCkgew0KICAgICAgICAgdGhpcy5jb25maWdCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7 DQotICAgICAgICB0aGlzLmdvQnV0dG9uLnNldEVuYWJsZWQodGhpcy50YXJnZXQgIT0gbnVsbCAN Ci0gICAgICAgICAgICAgICAgJiYgdGhpcy50YXJnZXQuZ2V0TW9yZUluZm9VUkwoKSAhPSBudWxs IA0KKyAgICAgICAgdGhpcy5nb0J1dHRvbi5zZXRFbmFibGVkKHRoaXMudGFyZ2V0ICE9IG51bGwN CisgICAgICAgICAgICAgICAgJiYgdGhpcy50YXJnZXQuZ2V0TW9yZUluZm9VUkwoKSAhPSBudWxs DQogICAgICAgICAgICAgICAgICYmIHRoaXMudGFyZ2V0LmdldE1vcmVJbmZvVVJMKCkubGVuZ3Ro KCkgPiAwKTsNCiAgICAgICAgIHRoaXMubmV0d29ya0J1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsN CiAgICAgICAgIHRoaXMud2FrZUJ1dHRvbi5zZXRFbmFibGVkKHRoaXMudGFyZ2V0ICE9IG51bGwN Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHRoaXMudGFyZ2V0LmlzU25vb3pl ZCgpIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAodGhpcy50YXJnZXQuaXNT bm9vemVkKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhdGhp cy50YXJnZXQuaXNFbmFibGVkKCkpKTsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgcHJpdmF0ZSB2 b2lkIHNldFRhcmdldEhlYWRsaW5lKCkgew0KIAlpZiAodGFyZ2V0ID09IG51bGwpIHsNCiAJICAg IHJldHVybjsNCkBAIC00MDgsNyArNDA5LDcgQEANCiAgICAgfQ0KIA0KICAgICBwcml2YXRlIHZv aWQgc2V0VGFyZ2V0VXNlQ2xhcmlmaWVycygpIHsNCi0JTE9HLmRlYnVnKCJzZXR0aW5nIGNsYXJp ZmllciB1c2FnZSBydWxlIik7DQorICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJzZXR0aW5n IGNsYXJpZmllciB1c2FnZSBydWxlIik7DQogICAgIH0NCiANCiAgICAgLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KQEAgLTQy NSwxMSArNDI2LDExIEBADQogCSAgICByZXR1cm47DQogCX0NCiAJaWYgKGUuZ2V0U291cmNlKCkg PT0gbmV0d29ya0J1dHRvbikgew0KLQkgICAgTE9HLmRlYnVnKCJUT0RPOiBuZXR3b3JrISIpOw0K KyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgIlRPRE86IG5ldHdvcmshIik7DQogCSAg ICByZXR1cm47DQogCX0NCiAJaWYgKGUuZ2V0U291cmNlKCkgPT0gY29uZmlnQnV0dG9uKSB7DQot CSAgICBMT0cuZGVidWcoIlRPRE86IGNvbmZpZyEiKTsNCisgICAgICAgICAgICBMT0cubG9nKExl dmVsLkZJTkUsICJUT0RPOiBjb25maWchIik7DQogCSAgICByZXR1cm47DQogCX0NCiAJaWYgKGUu Z2V0U291cmNlKCkgPT0gd2FrZUJ1dHRvbikgew0KQEAgLTQ0Miw3ICs0NDMsOCBAQA0KICAgICAg ICAgICAgIHRhYmxlLnNldEFkdmFuY2VkKHRydWUpOw0KICAgICAgICAgICAgIGFkdmFuY2VkQnV0 dG9uLnNldEVuYWJsZWQoZmFsc2UpOw0KICAgICAgICAgfQ0KLQlMT0cuZGVidWcoInVua25vd24g c3JjIGluIENyaXRpY0Jyb3dzZXJEaWFsb2c6ICIgKyBlLmdldFNvdXJjZSgpKTsNCisgICAgICAg IExPRy5sb2coTGV2ZWwuRklORSwNCisgICAgICAgICAgICAgICAgInVua25vd24gc3JjIGluIENy aXRpY0Jyb3dzZXJEaWFsb2c6IHswfSIsIGUuZ2V0U291cmNlKCkpOw0KICAgICB9DQogDQogICAg IC8qDQpAQCAtNDU0LDEwICs0NTYsMTAgQEANCiAJfQ0KIAlPYmplY3Qgc3JjID0gbHNlLmdldFNv dXJjZSgpOw0KIAlpZiAoc3JjICE9IHRhYmxlLmdldFNlbGVjdGlvbk1vZGVsKCkpIHsNCi0JICAg IExPRy5kZWJ1Zygic3JjID0gIiArIHNyYyk7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5G SU5FLCAic3JjID0gezB9Iiwgc3JjKTsNCiAJICAgIHJldHVybjsNCiAJfQ0KLQlMT0cuZGVidWco ImdvdCB2YWx1ZUNoYW5nZWQgZnJvbSAiICsgc3JjKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwu RklORSwgImdvdCB2YWx1ZUNoYW5nZWQgZnJvbSB7MH0iLCBzcmMpOw0KIAlpbnQgcm93ID0gdGFi bGUuZ2V0U2VsZWN0ZWRSb3coKTsNCiAgICAgICAgIGlmICh0aGlzLnRhcmdldCAhPSBudWxsKSB7 DQogICAgICAgICAgICAgdGhpcy50YXJnZXQuZGVsZXRlT2JzZXJ2ZXIodGhpcyk7DQpAQCAtNDcw LDE5ICs0NzIsMTkgQEANCiANCiAgICAgLyoNCiAgICAgICogVXBkYXRlcyB0aGUgYnV0dG9uIGlm IHRoZSBjdXJyZW50IHJvdyBjaGFuZ2VzDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAc2Vl IGphdmF4LnN3aW5nLmV2ZW50LlRhYmxlTW9kZWxMaXN0ZW5lciN0YWJsZUNoYW5nZWQoamF2YXgu c3dpbmcuZXZlbnQuVGFibGVNb2RlbEV2ZW50KQ0KICAgICAgKi8NCiAgICAgcHVibGljIHZvaWQg dGFibGVDaGFuZ2VkKFRhYmxlTW9kZWxFdmVudCBlKSB7DQogICAgICAgICB1cGRhdGVCdXR0b25z RW5hYmxlZCgpOw0KICAgICAgICAgdGFibGUucmVwYWludCgpOw0KICAgICB9DQotICAgIA0KKw0K ICAgICAvKg0KICAgICAgKiBAc2VlIGphdmF4LnN3aW5nLmV2ZW50LkRvY3VtZW50TGlzdGVuZXIj aW5zZXJ0VXBkYXRlKGphdmF4LnN3aW5nLmV2ZW50LkRvY3VtZW50RXZlbnQpDQogICAgICAqLw0K ICAgICBwdWJsaWMgdm9pZCBpbnNlcnRVcGRhdGUoRG9jdW1lbnRFdmVudCBlKSB7DQotCUxPRy5k ZWJ1ZyhnZXRDbGFzcygpLmdldE5hbWUoKSArICIgaW5zZXJ0Iik7DQorICAgICAgICBMT0cubG9n KExldmVsLkZJTkUsICJ7MH0gaW5zZXJ0IiwgZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOw0KIAlEb2N1 bWVudCBoRG9jID0gaGVhZGxpbmUuZ2V0RG9jdW1lbnQoKTsNCiAJRG9jdW1lbnQgbWlEb2MgPSBt b3JlSW5mby5nZXREb2N1bWVudCgpOw0KIAlEb2N1bWVudCBkRG9jID0gZGVzYy5nZXREb2N1bWVu dCgpOw0KQEAgLTUwNiw3ICs1MDgsNyBAQA0KICAgICAgKiBAc2VlIGphdmF4LnN3aW5nLmV2ZW50 LkRvY3VtZW50TGlzdGVuZXIjY2hhbmdlZFVwZGF0ZShqYXZheC5zd2luZy5ldmVudC5Eb2N1bWVu dEV2ZW50KQ0KICAgICAgKi8NCiAgICAgcHVibGljIHZvaWQgY2hhbmdlZFVwZGF0ZShEb2N1bWVu dEV2ZW50IGUpIHsNCi0JTE9HLmRlYnVnKGdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiBjaGFuZ2Vk Iik7DQorICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJ7MH0gY2hhbmdlZCIsIGdldENsYXNz KCkuZ2V0TmFtZSgpKTsNCiAJLy8gQXBwYXJlbnRseSwgdGhpcyBtZXRob2QgaXMgbmV2ZXIgY2Fs bGVkLg0KICAgICB9DQogDQpAQCAtNTIxLDEzICs1MjMsMTMgQEANCiAJZWxzZSBpZiAoc3JjID09 IHVzZUNsYXIpIHsNCiAJICAgIHNldFRhcmdldFVzZUNsYXJpZmllcnMoKTsNCiAJfSBlbHNlIHsN Ci0JICAgIExPRy5kZWJ1ZygidW5rbm93biBpdGVtU3RhdGVDaGFuZ2VkIHNyYzogIiArIHNyYyk7 DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAidW5rbm93biBpdGVtU3RhdGVDaGFu Z2VkIHNyYzogezB9Iiwgc3JjKTsNCiAJfQ0KICAgICB9DQogDQogICAgIC8qDQogICAgICAqIFJl ZnJlc2ggdGhlIHRhYmxlIHdoZW4gYSBjcml0aXF1ZSBpcyBlbmFibGVkL2Rpc2FibGVkDQotICAg ICAqIA0KKyAgICAgKg0KICAgICAgKiBAc2VlIGphdmEudXRpbC5PYnNlcnZlciN1cGRhdGUoamF2 YS51dGlsLk9ic2VydmFibGUsIGphdmEubGFuZy5PYmplY3QpDQogICAgICAqLw0KICAgICBwdWJs aWMgdm9pZCB1cGRhdGUoT2JzZXJ2YWJsZSBvLCBPYmplY3QgYXJnKSB7DQoNCk1vZGlmaWVkOiB0 cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2NvZ25pdGl2ZS9jcml0aWNzL3Vp L1RhYmxlTW9kZWxDcml0aWNzLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9z b3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3Vt bC9jb2duaXRpdmUvY3JpdGljcy91aS9UYWJsZU1vZGVsQ3JpdGljcy5qYXZhP3ZpZXc9ZGlmZiZw YXRocmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t LSB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2NvZ25pdGl2ZS9jcml0aWNz L3VpL1RhYmxlTW9kZWxDcml0aWNzLmphdmEJKG9yaWdpbmFsKQ0KKysrIHRydW5rL3NyYy9hcmdv dW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL2NyaXRpY3MvdWkvVGFibGVNb2RlbENy aXRpY3MuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8q ICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29u dHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJp YnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFt IGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdo aWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpA QCAtNDUsMjggKzQ1LDI5IEBADQogaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOw0KIGltcG9y dCBqYXZhLnV0aWwuSXRlcmF0b3I7DQogaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBq YXZhLnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2Vy Ow0KIA0KIGltcG9ydCBqYXZheC5zd2luZy5Td2luZ1V0aWxpdGllczsNCiBpbXBvcnQgamF2YXgu c3dpbmcudGFibGUuQWJzdHJhY3RUYWJsZU1vZGVsOw0KIA0KLWltcG9ydCBvcmcuYXBhY2hlLmxv ZzRqLkxvZ2dlcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwuY29nbml0aXZlLkFnZW5jeTsNCiBpbXBv cnQgb3JnLmFyZ291bWwuY29nbml0aXZlLkNyaXRpYzsNCiBpbXBvcnQgb3JnLmFyZ291bWwuY29n bml0aXZlLlRyYW5zbGF0b3I7DQogDQogLyoqDQogICogVGhlIFRhYmxlIE1vZGVsIGZyb20gdGhl IENyaXRpY3MgQnJvd3NlciBkaWFsb2cuIDxwPg0KLSAqIA0KKyAqDQogICogVGhpcyBjbGFzcyB1 c2VkIHRvIGJlIHBhcnQgb2YgdGhlIENyaXRpY0Jyb3dzZXJEaWFsb2cuamF2YSBmaWxlLiA8cD4N Ci0gKiANCi0gKiBJbiBhZHZhbmNlZCBtb2RlLCB0aGlzIG1vZGVsIGFsc28gaGFuZGxlcyANCisg Kg0KKyAqIEluIGFkdmFuY2VkIG1vZGUsIHRoaXMgbW9kZWwgYWxzbyBoYW5kbGVzDQogICogcHJp b3JpdHksIHN1cHBvcnRlZERlY2lzaW9ucywga25vd2xlZGdlVHlwZXMuDQogICovDQogY2xhc3Mg VGFibGVNb2RlbENyaXRpY3MgZXh0ZW5kcyBBYnN0cmFjdFRhYmxlTW9kZWwNCiAgICAgaW1wbGVt ZW50cyBWZXRvYWJsZUNoYW5nZUxpc3RlbmVyIHsNCiANCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmlu YWwgTG9nZ2VyIExPRyA9DQotICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKFRhYmxlTW9kZWxDcml0 aWNzLmNsYXNzKTsNCisgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoVGFibGVNb2RlbENyaXRpY3Mu Y2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgcHJpdmF0ZSBMaXN0PENyaXRpYz4gY3JpdGljczsN CiAgICAgcHJpdmF0ZSBib29sZWFuIGFkdmFuY2VkOw0KQEAgLTc2LDcgKzc3LDcgQEANCiAgICAg ICoNCiAgICAgICogQHBhcmFtIGFkdmFuY2VkTW9kZSB0cnVlIGlmIHdlIHNob3cgYWR2YW5jZWQg Y29sdW1ucw0KICAgICAgKi8NCi0gICAgcHVibGljIFRhYmxlTW9kZWxDcml0aWNzKGJvb2xlYW4g YWR2YW5jZWRNb2RlKSB7IA0KKyAgICBwdWJsaWMgVGFibGVNb2RlbENyaXRpY3MoYm9vbGVhbiBh ZHZhbmNlZE1vZGUpIHsNCiAgICAgICAgIGNyaXRpY3MgPSBuZXcgQXJyYXlMaXN0PENyaXRpYz4o QWdlbmN5LmdldENyaXRpY0xpc3QoKSk7DQogICAgICAgICAvLyBTZXQgaW5pdGlhbCBzb3J0aW5n IG9uIENyaXRpYyBIZWFkbGluZQ0KICAgICAgICAgQ29sbGVjdGlvbnMuc29ydChjcml0aWNzLCBu ZXcgQ29tcGFyYXRvcjxDcml0aWM+KCkgew0KQEAgLTk5LDggKzEwMCw4IEBADQogICAgIC8qDQog ICAgICAqIEBzZWUgamF2YXguc3dpbmcudGFibGUuVGFibGVNb2RlbCNnZXRDb2x1bW5Db3VudCgp DQogICAgICAqLw0KLSAgICBwdWJsaWMgaW50IGdldENvbHVtbkNvdW50KCkgeyANCi0gICAgICAg IHJldHVybiBhZHZhbmNlZCA/IDYgOiAzOyANCisgICAgcHVibGljIGludCBnZXRDb2x1bW5Db3Vu dCgpIHsNCisgICAgICAgIHJldHVybiBhZHZhbmNlZCA/IDYgOiAzOw0KICAgICB9DQogDQogICAg IC8qDQpAQCAtMTk3LDcgKzE5OCw3IEBADQogICAgICAgICB9DQogICAgICAgICB0aHJvdyBuZXcg SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7DQogICAgIH0NCi0gICAgDQorDQogICAgIHByaXZh dGUgU3RyaW5nIGxpc3RUb1N0cmluZyhMaXN0IGwpIHsNCiAgICAgICAgIFN0cmluZ0J1ZmZlciBi dWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7DQogICAgICAgICBJdGVyYXRvciBpID0gbC5pdGVyYXRv cigpOw0KQEAgLTIxNyw3ICsyMTgsOSBAQA0KICAgICAgKiBAc2VlIGphdmF4LnN3aW5nLnRhYmxl LlRhYmxlTW9kZWwjc2V0VmFsdWVBdChqYXZhLmxhbmcuT2JqZWN0LCBpbnQsIGludCkNCiAgICAg ICovDQogICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlQXQoT2JqZWN0IGFWYWx1ZSwgaW50IHJvd0lu ZGV4LCBpbnQgY29sdW1uSW5kZXgpICB7DQotICAgICAgICBMT0cuZGVidWcoInNldHRpbmcgdGFi bGUgdmFsdWUgIiArIHJvd0luZGV4ICsgIiwgIiArIGNvbHVtbkluZGV4KTsNCisgICAgICAgIExP Ry5sb2coTGV2ZWwuRklORSwNCisgICAgICAgICAgICAgICAgInNldHRpbmcgdGFibGUgdmFsdWUg ezB9LCB7MX0iLA0KKyAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117cm93SW5kZXgsIGNvbHVt bkluZGV4fSk7DQogICAgICAgICBpZiAoY29sdW1uSW5kZXggIT0gMCkgew0KICAgICAgICAgICAg IHJldHVybjsNCiAgICAgICAgIH0NCkBAIC0yMzIsNyArMjM1LDcgQEANCiANCiAgICAgLyoNCiAg ICAgICogVE9ETzogV2h5IGlzIHRoaXMgaGVyZT8gV2hvIGlzIGNhbGxpbmcgdGhpcz8NCi0gICAg ICogDQorICAgICAqDQogICAgICAqIEBzZWUgamF2YS5iZWFucy5WZXRvYWJsZUNoYW5nZUxpc3Rl bmVyI3ZldG9hYmxlQ2hhbmdlKGphdmEuYmVhbnMuUHJvcGVydHlDaGFuZ2VFdmVudCkNCiAgICAg ICovDQogICAgIHB1YmxpYyB2b2lkIHZldG9hYmxlQ2hhbmdlKFByb3BlcnR5Q2hhbmdlRXZlbnQg cGNlKSB7DQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1s L2NvZ25pdGl2ZS91aS9EaXNtaXNzVG9Eb0l0ZW1EaWFsb2cuamF2YQ0KVXJsOiBodHRwOi8vYXJn b3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9zcmMvYXJnb3VtbC1h cHAvc3JjL29yZy9hcmdvdW1sL2NvZ25pdGl2ZS91aS9EaXNtaXNzVG9Eb0l0ZW1EaWFsb2cuamF2 YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9jb2du aXRpdmUvdWkvRGlzbWlzc1RvRG9JdGVtRGlhbG9nLmphdmEJKG9yaWdpbmFsKQ0KKysrIHRydW5r L3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL3VpL0Rpc21pc3NUb0Rv SXRlbURpYWxvZy5qYXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBA DQogLyogJElkJA0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAw OSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiBD b250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHBy b2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZhaWxh YmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQog ICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUg YXQNCkBAIC00Myw2ICs0Myw4IEBADQogaW1wb3J0IGphdmEuYXd0Lkluc2V0czsNCiBpbXBvcnQg amF2YS5hd3QuZXZlbnQuQWN0aW9uRXZlbnQ7DQogaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlv bkxpc3RlbmVyOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2 YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KIA0KIGltcG9ydCBqYXZheC5zd2luZy5CdXR0b25Hcm91 cDsNCiBpbXBvcnQgamF2YXguc3dpbmcuSkxhYmVsOw0KQEAgLTUyLDcgKzU0LDYgQEANCiBpbXBv cnQgamF2YXguc3dpbmcuSlNjcm9sbFBhbmU7DQogaW1wb3J0IGphdmF4LnN3aW5nLkpUZXh0QXJl YTsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdv dW1sLmNvZ25pdGl2ZS5EZXNpZ25lcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwuY29nbml0aXZlLlRv RG9JdGVtOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5jb2duaXRpdmUuVG9Eb0xpc3Q7DQpAQCAtNjgs NyArNjksNyBAQA0KIHB1YmxpYyBjbGFzcyBEaXNtaXNzVG9Eb0l0ZW1EaWFsb2cgZXh0ZW5kcyBB cmdvRGlhbG9nIHsNCiANCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9DQot ICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKERpc21pc3NUb0RvSXRlbURpYWxvZy5jbGFzcyk7DQor ICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKERpc21pc3NUb0RvSXRlbURpYWxvZy5jbGFzcy5nZXRO YW1lKCkpOw0KIA0KICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQogICAgIC8vIGluc3RhbmNlIHZhcmlhYmxlcw0KQEAg LTE3Miw3ICsxNzMsOCBAQA0KICAgICAgICAgICAgICAgICAgICAgZXhwbGFpbihlKTsNCiAgICAg ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICBlbHNlIHsNCi0gICAgICAgICAgICAgICAg ICAgIExPRy53YXJuKCJEaXNzbWlzc1RvRG9JdGVtRGlhbG9nOiBVbmtub3duIGFjdGlvbjogIiAr IGUpOw0KKyAgICAgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5XQVJOSU5HLA0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiRGlzc21pc3NUb0RvSXRlbURpYWxvZzogVW5rbm93biBh Y3Rpb246ICIgKyBlKTsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCiAgICAg ICAgIH0pOw0KQEAgLTI0OSw3ICsyNTEsNyBAQA0KICAgICAgICAgICAgICAgICAgICAgRGVzaWdu ZXIuTU9ERUxfVE9ET0lURU1fRElTTUlTU0VELCBudWxsLCBudWxsKTsNCiAgICAgICAgIH0NCiAg ICAgICAgIGNhdGNoIChVbnJlc29sdmFibGVFeGNlcHRpb24gdXJlKSB7DQotICAgICAgICAgICAg TE9HLmVycm9yKCJSZXNvbHZlIGZhaWxlZCAodXJlKTogIiwgdXJlKTsNCisgICAgICAgICAgICBM T0cubG9nKExldmVsLlNFVkVSRSwgIlJlc29sdmUgZmFpbGVkICh1cmUpOiAiLCB1cmUpOw0KICAg ICAgICAgICAgIEpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKA0KIAkJICAgIHRoaXMsDQog CQkgICAgdXJlLmdldE1lc3NhZ2UoKSwNCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFw cC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL3VpL1RvRG9CeURlY2lzaW9uLmphdmENClVybDog aHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3Jj L2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9jb2duaXRpdmUvdWkvVG9Eb0J5RGVjaXNpb24u amF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9j b2duaXRpdmUvdWkvVG9Eb0J5RGVjaXNpb24uamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3Jj L2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9jb2duaXRpdmUvdWkvVG9Eb0J5RGVjaXNpb24u amF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQN CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0 b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3Jz IC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0 aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFj Y29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtMzks OCArMzksOSBAQA0KIHBhY2thZ2Ugb3JnLmFyZ291bWwuY29nbml0aXZlLnVpOw0KIA0KIGltcG9y dCBqYXZhLnV0aWwuTGlzdDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1w b3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0 ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5EZWNpc2lvbjsNCiBpbXBv cnQgb3JnLmFyZ291bWwuY29nbml0aXZlLkRlc2lnbmVyOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5j b2duaXRpdmUuVG9Eb0l0ZW07DQpAQCAtNTMsNyArNTQsNyBAQA0KIHB1YmxpYyBjbGFzcyBUb0Rv QnlEZWNpc2lvbiBleHRlbmRzIFRvRG9QZXJzcGVjdGl2ZQ0KICAgICBpbXBsZW1lbnRzIFRvRG9M aXN0TGlzdGVuZXIgew0KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCi0g ICAgICAgIExvZ2dlci5nZXRMb2dnZXIoVG9Eb0J5RGVjaXNpb24uY2xhc3MpOw0KKyAgICAgICAg TG9nZ2VyLmdldExvZ2dlcihUb0RvQnlEZWNpc2lvbi5jbGFzcy5nZXROYW1lKCkpOw0KIA0KIA0K ICAgICAvKioNCkBAIC03Miw3ICs3Myw3IEBADQogICAgICAqIEBzZWUgb3JnLmFyZ291bWwuY29n bml0aXZlLlRvRG9MaXN0TGlzdGVuZXIjdG9Eb0l0ZW1zQ2hhbmdlZChvcmcuYXJnb3VtbC5jb2du aXRpdmUuVG9Eb0xpc3RFdmVudCkNCiAgICAgICovDQogICAgIHB1YmxpYyB2b2lkIHRvRG9JdGVt c0NoYW5nZWQoVG9Eb0xpc3RFdmVudCB0ZGUpIHsNCi0JTE9HLmRlYnVnKCJ0b0RvSXRlbUNoYW5n ZWQiKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgInRvRG9JdGVtQ2hhbmdlZCIpOw0K ICAgICAgICAgTGlzdDxUb0RvSXRlbT4gaXRlbXMgPSB0ZGUuZ2V0VG9Eb0l0ZW1MaXN0KCk7DQog CU9iamVjdFtdIHBhdGggPSBuZXcgT2JqZWN0WzJdOw0KIAlwYXRoWzBdID0gRGVzaWduZXIudGhl RGVzaWduZXIoKS5nZXRUb0RvTGlzdCgpOw0KQEAgLTEwOSw3ICsxMTAsNyBAQA0KICAgICAgKiBA c2VlIG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5Ub0RvTGlzdExpc3RlbmVyI3RvRG9JdGVtc0FkZGVk KG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5Ub0RvTGlzdEV2ZW50KQ0KICAgICAgKi8NCiAgICAgcHVi bGljIHZvaWQgdG9Eb0l0ZW1zQWRkZWQoVG9Eb0xpc3RFdmVudCB0ZGUpIHsNCi0JTE9HLmRlYnVn KCJ0b0RvSXRlbUFkZGVkIik7DQorICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJ0b0RvSXRl bUFkZGVkIik7DQogCUxpc3Q8VG9Eb0l0ZW0+IGl0ZW1zID0gdGRlLmdldFRvRG9JdGVtTGlzdCgp Ow0KIAlPYmplY3RbXSBwYXRoID0gbmV3IE9iamVjdFsyXTsNCiAJcGF0aFswXSA9IERlc2lnbmVy LnRoZURlc2lnbmVyKCkuZ2V0VG9Eb0xpc3QoKTsNCkBAIC0xNDYsMTQgKzE0NywxNCBAQA0KICAg ICAgKiBAc2VlIG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5Ub0RvTGlzdExpc3RlbmVyI3RvRG9JdGVt c1JlbW92ZWQob3JnLmFyZ291bWwuY29nbml0aXZlLlRvRG9MaXN0RXZlbnQpDQogICAgICAqLw0K ICAgICBwdWJsaWMgdm9pZCB0b0RvSXRlbXNSZW1vdmVkKFRvRG9MaXN0RXZlbnQgdGRlKSB7DQot CUxPRy5kZWJ1ZygidG9Eb0l0ZW1SZW1vdmVkIik7DQorICAgICAgICBMT0cubG9nKExldmVsLkZJ TkUsICJ0b0RvSXRlbVJlbW92ZWQiKTsNCiAJTGlzdDxUb0RvSXRlbT4gaXRlbXMgPSB0ZGUuZ2V0 VG9Eb0l0ZW1MaXN0KCk7DQogCU9iamVjdFtdIHBhdGggPSBuZXcgT2JqZWN0WzJdOw0KIAlwYXRo WzBdID0gRGVzaWduZXIudGhlRGVzaWduZXIoKS5nZXRUb0RvTGlzdCgpOw0KIA0KICAgICAgICAg Zm9yIChEZWNpc2lvbiBkZWMgOiBEZXNpZ25lci50aGVEZXNpZ25lcigpLmdldERlY2lzaW9uTW9k ZWwoKQ0KICAgICAgICAgICAgICAgICAuZ2V0RGVjaXNpb25MaXN0KCkpIHsNCi0JICAgIExPRy5k ZWJ1ZygidG9Eb0l0ZW1SZW1vdmVkIHVwZGF0aW5nIGRlY2lzaW9uIG5vZGUhIik7DQorICAgICAg ICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAidG9Eb0l0ZW1SZW1vdmVkIHVwZGF0aW5nIGRlY2lz aW9uIG5vZGUhIik7DQogCSAgICBib29sZWFuIGFueUluRGVjID0gZmFsc2U7DQogICAgICAgICAg ICAgZm9yIChUb0RvSXRlbSBpdGVtIDogaXRlbXMpIHsNCiAJCWlmIChpdGVtLnN1cHBvcnRzKGRl YykpIHsNCkBAIC0yMjMsNSArMjI0LDMgQEANCiAgICAgLy8gICB9DQogDQogfSAvKiBlbmQgY2xh c3MgVG9Eb0J5RGVjaXNpb24gKi8NCi0NCi0NCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1s LWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL3VpL1RvRG9CeUdvYWwuamF2YQ0KVXJsOiBo dHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9zcmMv YXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2NvZ25pdGl2ZS91aS9Ub0RvQnlHb2FsLmphdmE/ dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0 aXZlL3VpL1RvRG9CeUdvYWwuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwt YXBwL3NyYy9vcmcvYXJnb3VtbC9jb2duaXRpdmUvdWkvVG9Eb0J5R29hbC5qYXZhCTIwMTItMTIt MzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQogLyogJElkJA0KICAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVs b3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cN CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlp bmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhp cyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCkBAIC0zOCw3ICszOCw5IEBADQog DQogcGFja2FnZSBvcmcuYXJnb3VtbC5jb2duaXRpdmUudWk7DQogDQotaW1wb3J0IG9yZy5hcGFj aGUubG9nNGouTG9nZ2VyOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBv cnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KKw0KIGltcG9ydCBvcmcuYXJnb3VtbC5jb2du aXRpdmUuRGVzaWduZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5Hb2FsOw0KIGlt cG9ydCBvcmcuYXJnb3VtbC5jb2duaXRpdmUuVG9Eb0l0ZW07DQpAQCAtNTIsNyArNTQsNyBAQA0K IHB1YmxpYyBjbGFzcyBUb0RvQnlHb2FsIGV4dGVuZHMgVG9Eb1BlcnNwZWN0aXZlDQogICAgIGlt cGxlbWVudHMgVG9Eb0xpc3RMaXN0ZW5lciB7DQogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExv Z2dlciBMT0cgPQ0KLSAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihUb0RvQnlHb2FsLmNsYXNzKTsN CisgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoVG9Eb0J5R29hbC5jbGFzcy5nZXROYW1lKCkpOw0K IA0KIA0KICAgICAvKioNCkBAIC03MSw3ICs3Myw3IEBADQogICAgICAqIEBzZWUgb3JnLmFyZ291 bWwuY29nbml0aXZlLlRvRG9MaXN0TGlzdGVuZXIjdG9Eb0l0ZW1zQ2hhbmdlZChvcmcuYXJnb3Vt bC5jb2duaXRpdmUuVG9Eb0xpc3RFdmVudCkNCiAgICAgICovDQogICAgIHB1YmxpYyB2b2lkIHRv RG9JdGVtc0NoYW5nZWQoVG9Eb0xpc3RFdmVudCB0ZGUpIHsNCi0JTE9HLmRlYnVnKCJ0b0RvSXRl bXNDaGFuZ2VkIik7DQorICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJ0b0RvSXRlbXNDaGFu Z2VkIik7DQogCU9iamVjdFtdIHBhdGggPSBuZXcgT2JqZWN0WzJdOw0KIAlwYXRoWzBdID0gRGVz aWduZXIudGhlRGVzaWduZXIoKS5nZXRUb0RvTGlzdCgpOw0KIA0KQEAgLTEwNiw3ICsxMDgsNyBA QA0KICAgICAgKiBAc2VlIG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5Ub0RvTGlzdExpc3RlbmVyI3Rv RG9JdGVtc0FkZGVkKG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5Ub0RvTGlzdEV2ZW50KQ0KICAgICAg Ki8NCiAgICAgcHVibGljIHZvaWQgdG9Eb0l0ZW1zQWRkZWQoVG9Eb0xpc3RFdmVudCB0ZGUpIHsN Ci0JTE9HLmRlYnVnKCJ0b0RvSXRlbUFkZGVkIik7DQorICAgICAgICBMT0cubG9nKExldmVsLkZJ TkUsICJ0b0RvSXRlbUFkZGVkIik7DQogCU9iamVjdFtdIHBhdGggPSBuZXcgT2JqZWN0WzJdOw0K IAlwYXRoWzBdID0gRGVzaWduZXIudGhlRGVzaWduZXIoKS5nZXRUb0RvTGlzdCgpOw0KIA0KQEAg LTE0MiwxMiArMTQ0LDEyIEBADQogICAgICAqIEBzZWUgb3JnLmFyZ291bWwuY29nbml0aXZlLlRv RG9MaXN0TGlzdGVuZXIjdG9Eb0l0ZW1zUmVtb3ZlZChvcmcuYXJnb3VtbC5jb2duaXRpdmUuVG9E b0xpc3RFdmVudCkNCiAgICAgICovDQogICAgIHB1YmxpYyB2b2lkIHRvRG9JdGVtc1JlbW92ZWQo VG9Eb0xpc3RFdmVudCB0ZGUpIHsNCi0JTE9HLmRlYnVnKCJ0b0RvSXRlbUFkZGVkIik7DQorICAg ICAgICBMT0cubG9nKExldmVsLkZJTkUsICJ0b0RvSXRlbUFkZGVkIik7DQogCU9iamVjdFtdIHBh dGggPSBuZXcgT2JqZWN0WzJdOw0KIAlwYXRoWzBdID0gRGVzaWduZXIudGhlRGVzaWduZXIoKS5n ZXRUb0RvTGlzdCgpOw0KIA0KICAgICAgICAgZm9yIChHb2FsIGcgOiBEZXNpZ25lci50aGVEZXNp Z25lcigpLmdldEdvYWxMaXN0KCkpIHsNCi0JICAgIExPRy5kZWJ1ZygidG9Eb0l0ZW1SZW1vdmVk IHVwZGF0aW5nIGRlY2lzaW9uIG5vZGUhIik7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5G SU5FLCAidG9Eb0l0ZW1SZW1vdmVkIHVwZGF0aW5nIGRlY2lzaW9uIG5vZGUhIik7DQogCSAgICBi b29sZWFuIGFueUluR29hbCA9IGZhbHNlOw0KICAgICAgICAgICAgIGZvciAoVG9Eb0l0ZW0gaXRl bSA6IHRkZS5nZXRUb0RvSXRlbUxpc3QoKSkgew0KIAkJaWYgKGl0ZW0uc3VwcG9ydHMoZykpIHsN CkBAIC0xNzAsNSArMTcyLDMgQEANCiANCiANCiB9DQotDQotDQoNCk1vZGlmaWVkOiB0cnVuay9z cmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2NvZ25pdGl2ZS91aS9Ub0RvQnlPZmZlbmRl ci5qYXZhDQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdv dW1sL3RydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL3VpL1Rv RG9CeU9mZmVuZGVyLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5 MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMv b3JnL2FyZ291bWwvY29nbml0aXZlL3VpL1RvRG9CeU9mZmVuZGVyLmphdmEJKG9yaWdpbmFsKQ0K KysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL3VpL1Rv RG9CeU9mZmVuZGVyLmphdmEJMjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMSw2ICsxLDYg QEANCiAvKiAkSWQkDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAy MDA5IENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEy IENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMg cHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAgKiBhcmUgbWFkZSBhdmFp bGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAN CiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJs ZSBhdA0KQEAgLTM5LDggKzM5LDkgQEANCiBwYWNrYWdlIG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS51 aTsNCiANCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5n LkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQotaW1wb3J0IG9y Zy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5jb2duaXRpdmUuRGVz aWduZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5MaXN0U2V0Ow0KIGltcG9ydCBv cmcuYXJnb3VtbC5jb2duaXRpdmUuVG9Eb0l0ZW07DQpAQCAtNTQsNyArNTUsOCBAQA0KIHB1Ymxp YyBjbGFzcyBUb0RvQnlPZmZlbmRlciBleHRlbmRzIFRvRG9QZXJzcGVjdGl2ZQ0KICAgICAgICAg aW1wbGVtZW50cyBUb0RvTGlzdExpc3RlbmVyIHsNCiANCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmlu YWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoVG9Eb0J5T2ZmZW5kZXIuY2xhc3MpOw0K KyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCisgICAgICAgIExvZ2dlci5n ZXRMb2dnZXIoVG9Eb0J5T2ZmZW5kZXIuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgLyoqDQog ICAgICAqIFRoZSBjb25zdHJ1Y3Rvci4NCkBAIC03Miw3ICs3NCw3IEBADQogICAgICAqIEBzZWUg b3JnLmFyZ291bWwuY29nbml0aXZlLlRvRG9MaXN0TGlzdGVuZXIjdG9Eb0l0ZW1zQ2hhbmdlZChv cmcuYXJnb3VtbC5jb2duaXRpdmUuVG9Eb0xpc3RFdmVudCkNCiAgICAgICovDQogICAgIHB1Ymxp YyB2b2lkIHRvRG9JdGVtc0NoYW5nZWQoVG9Eb0xpc3RFdmVudCB0ZGUpIHsNCi0gICAgICAgIExP Ry5kZWJ1ZygidG9Eb0l0ZW1zQ2hhbmdlZCIpOw0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5F LCAidG9Eb0l0ZW1zQ2hhbmdlZCIpOw0KICAgICAgICAgTGlzdDxUb0RvSXRlbT4gaXRlbXMgPSB0 ZGUuZ2V0VG9Eb0l0ZW1MaXN0KCk7DQogICAgICAgICBPYmplY3RbXSBwYXRoID0gbmV3IE9iamVj dFsyXTsNCiAgICAgICAgIHBhdGhbMF0gPSBEZXNpZ25lci50aGVEZXNpZ25lcigpLmdldFRvRG9M aXN0KCk7DQpAQCAtMTE5LDcgKzEyMSw3IEBADQogICAgICAqIEBzZWUgb3JnLmFyZ291bWwuY29n bml0aXZlLlRvRG9MaXN0TGlzdGVuZXIjdG9Eb0l0ZW1zQWRkZWQob3JnLmFyZ291bWwuY29nbml0 aXZlLlRvRG9MaXN0RXZlbnQpDQogICAgICAqLw0KICAgICBwdWJsaWMgdm9pZCB0b0RvSXRlbXNB ZGRlZChUb0RvTGlzdEV2ZW50IHRkZSkgew0KLSAgICAgICAgTE9HLmRlYnVnKCJ0b0RvSXRlbUFk ZGVkIik7DQorICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJ0b0RvSXRlbUFkZGVkIik7DQog ICAgICAgICBMaXN0PFRvRG9JdGVtPiBpdGVtcyA9IHRkZS5nZXRUb0RvSXRlbUxpc3QoKTsNCiAg ICAgICAgIE9iamVjdFtdIHBhdGggPSBuZXcgT2JqZWN0WzJdOw0KICAgICAgICAgcGF0aFswXSA9 IERlc2lnbmVyLnRoZURlc2lnbmVyKCkuZ2V0VG9Eb0xpc3QoKTsNCkBAIC0xNjgsNyArMTcwLDcg QEANCiAgICAgICogQHNlZSBvcmcuYXJnb3VtbC5jb2duaXRpdmUuVG9Eb0xpc3RMaXN0ZW5lciN0 b0RvSXRlbXNSZW1vdmVkKG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5Ub0RvTGlzdEV2ZW50KQ0KICAg ICAgKi8NCiAgICAgcHVibGljIHZvaWQgdG9Eb0l0ZW1zUmVtb3ZlZChUb0RvTGlzdEV2ZW50IHRk ZSkgew0KLSAgICAgICAgTE9HLmRlYnVnKCJ0b0RvSXRlbVJlbW92ZWQiKTsNCisgICAgICAgIExP Ry5sb2coTGV2ZWwuRklORSwgInRvRG9JdGVtUmVtb3ZlZCIpOw0KICAgICAgICAgTGlzdDxUb0Rv SXRlbT4gaXRlbXMgPSB0ZGUuZ2V0VG9Eb0l0ZW1MaXN0KCk7DQogICAgICAgICBPYmplY3RbXSBw YXRoID0gbmV3IE9iamVjdFsyXTsNCiAgICAgICAgIHBhdGhbMF0gPSBEZXNpZ25lci50aGVEZXNp Z25lcigpLmdldFRvRG9MaXN0KCk7DQpAQCAtMTkyLDcgKzE5NCw3IEBADQogICAgICAgICAgICAg ICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICAgfQ0KIA0KLSAgICAgICAgICAgICAg ICBMT0cuZGVidWcoInRvRG9JdGVtUmVtb3ZlZCB1cGRhdGluZyBQcmlvcml0eU5vZGUiKTsNCisg ICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAidG9Eb0l0ZW1SZW1vdmVkIHVwZGF0 aW5nIFByaW9yaXR5Tm9kZSIpOw0KICAgICAgICAgICAgICAgICBwYXRoWzFdID0gb2ZmOw0KICAg ICAgICAgICAgICAgICAvLyBmaXJlVHJlZU5vZGVzQ2hhbmdlZCh0aGlzLCBwYXRoLCBjaGlsZElu ZGljZXMsIGNoaWxkcmVuKTsNCiAgICAgICAgICAgICAgICAgZmlyZVRyZWVTdHJ1Y3R1cmVDaGFu Z2VkKHBhdGgpOw0KQEAgLTIwNyw0ICsyMDksMyBAQA0KICAgICB9DQogDQogfSAvKiBlbmQgY2xh c3MgVG9Eb0J5T2ZmZW5kZXIgKi8NCi0NCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFw cC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL3VpL1RvRG9CeVBvc3Rlci5qYXZhDQpVcmw6IGh0 dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5rL3NyYy9h cmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL3VpL1RvRG9CeVBvc3Rlci5qYXZh P3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2NvZ25p dGl2ZS91aS9Ub0RvQnlQb3N0ZXIuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291 bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9jb2duaXRpdmUvdWkvVG9Eb0J5UG9zdGVyLmphdmEJMjAx Mi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMSw2ICsxLDYgQEANCiAvKiAkSWQkDQogICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA5IENvbnRyaWJ1dG9ycyAtIHNl ZSBiZWxvdw0KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEyIENvbnRyaWJ1dG9ycyAtIHNlZSBi ZWxvdw0KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29t cGFueWluZyBtYXRlcmlhbHMNCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAgKiB3aGljaCBhY2NvbXBhbmll cyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KQEAgLTM5LDggKzM5LDkg QEANCiBwYWNrYWdlIG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS51aTsNCiANCiBpbXBvcnQgamF2YS51 dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZh LnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2Vy Ow0KIGltcG9ydCBvcmcuYXJnb3VtbC5jb2duaXRpdmUuRGVzaWduZXI7DQogaW1wb3J0IG9yZy5h cmdvdW1sLmNvZ25pdGl2ZS5MaXN0U2V0Ow0KIGltcG9ydCBvcmcuYXJnb3VtbC5jb2duaXRpdmUu UG9zdGVyOw0KQEAgLTU1LDcgKzU2LDcgQEANCiBwdWJsaWMgY2xhc3MgVG9Eb0J5UG9zdGVyIGV4 dGVuZHMgVG9Eb1BlcnNwZWN0aXZlDQogICAgIGltcGxlbWVudHMgVG9Eb0xpc3RMaXN0ZW5lciB7 DQogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KLSAgICAgICAgTG9nZ2Vy LmdldExvZ2dlcihUb0RvQnlQb3N0ZXIuY2xhc3MpOw0KKyAgICAgICAgTG9nZ2VyLmdldExvZ2dl cihUb0RvQnlQb3N0ZXIuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgLyoqDQogICAgICAqIFRo ZSBjb25zdHJ1Y3Rvci4NCkBAIC03MywxMiArNzQsMTIgQEANCiAgICAgICogQHNlZSBvcmcuYXJn b3VtbC5jb2duaXRpdmUuVG9Eb0xpc3RMaXN0ZW5lciN0b0RvSXRlbXNDaGFuZ2VkKG9yZy5hcmdv dW1sLmNvZ25pdGl2ZS5Ub0RvTGlzdEV2ZW50KQ0KICAgICAgKi8NCiAgICAgcHVibGljIHZvaWQg dG9Eb0l0ZW1zQ2hhbmdlZChUb0RvTGlzdEV2ZW50IHRkZSkgew0KLQlMT0cuZGVidWcoInRvRG9J dGVtc0NoYW5nZWQiKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgInRvRG9JdGVtc0No YW5nZWQiKTsNCiAgICAgICAgIExpc3Q8VG9Eb0l0ZW0+IGl0ZW1zID0gdGRlLmdldFRvRG9JdGVt TGlzdCgpOw0KIAlPYmplY3RbXSBwYXRoID0gbmV3IE9iamVjdFsyXTsNCiAJcGF0aFswXSA9IERl c2lnbmVyLnRoZURlc2lnbmVyKCkuZ2V0VG9Eb0xpc3QoKTsNCiANCi0JTGlzdFNldDxQb3N0ZXI+ IGFsbFBvc3RlcnMgPSANCisJTGlzdFNldDxQb3N0ZXI+IGFsbFBvc3RlcnMgPQ0KIAkgICAgRGVz aWduZXIudGhlRGVzaWduZXIoKS5nZXRUb0RvTGlzdCgpLmdldFBvc3RlcnMoKTsNCiAgICAgICAg IHN5bmNocm9uaXplZCAoYWxsUG9zdGVycykgew0KICAgICAgICAgICAgIGZvciAoUG9zdGVyIHAg OiBhbGxQb3N0ZXJzKSB7DQpAQCAtMTE1LDEyICsxMTYsMTIgQEANCiAgICAgICogQHNlZSBvcmcu YXJnb3VtbC5jb2duaXRpdmUuVG9Eb0xpc3RMaXN0ZW5lciN0b0RvSXRlbXNBZGRlZChvcmcuYXJn b3VtbC5jb2duaXRpdmUuVG9Eb0xpc3RFdmVudCkNCiAgICAgICovDQogICAgIHB1YmxpYyB2b2lk IHRvRG9JdGVtc0FkZGVkKFRvRG9MaXN0RXZlbnQgdGRlKSB7DQotCUxPRy5kZWJ1ZygidG9Eb0l0 ZW1BZGRlZCIpOw0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAidG9Eb0l0ZW1BZGRlZCIp Ow0KIAlMaXN0PFRvRG9JdGVtPiBpdGVtcyA9IHRkZS5nZXRUb0RvSXRlbUxpc3QoKTsNCiAJT2Jq ZWN0W10gcGF0aCA9IG5ldyBPYmplY3RbMl07DQogCXBhdGhbMF0gPSBEZXNpZ25lci50aGVEZXNp Z25lcigpLmdldFRvRG9MaXN0KCk7DQogDQotCUxpc3RTZXQ8UG9zdGVyPiBhbGxQb3N0ZXJzID0g DQorCUxpc3RTZXQ8UG9zdGVyPiBhbGxQb3N0ZXJzID0NCiAJICAgIERlc2lnbmVyLnRoZURlc2ln bmVyKCkuZ2V0VG9Eb0xpc3QoKS5nZXRQb3N0ZXJzKCk7DQogCXN5bmNocm9uaXplZCAoYWxsUG9z dGVycykgew0KICAgICAgICAgICAgIGZvciAoUG9zdGVyIHAgOiBhbGxQb3N0ZXJzKSB7DQpAQCAt MTU3LDkgKzE1OCw5IEBADQogICAgICAqIEBzZWUgb3JnLmFyZ291bWwuY29nbml0aXZlLlRvRG9M aXN0TGlzdGVuZXIjdG9Eb0l0ZW1zUmVtb3ZlZChvcmcuYXJnb3VtbC5jb2duaXRpdmUuVG9Eb0xp c3RFdmVudCkNCiAgICAgICovDQogICAgIHB1YmxpYyB2b2lkIHRvRG9JdGVtc1JlbW92ZWQoVG9E b0xpc3RFdmVudCB0ZGUpIHsNCi0JTE9HLmRlYnVnKCJ0b0RvSXRlbVJlbW92ZWQiKTsNCisgICAg ICAgIExPRy5sb2coTGV2ZWwuRklORSwgInRvRG9JdGVtUmVtb3ZlZCIpOw0KICAgICAgICAgTGlz dDxUb0RvSXRlbT4gaXRlbXMgPSB0ZGUuZ2V0VG9Eb0l0ZW1MaXN0KCk7DQotICAgICAgICANCisN CiAJT2JqZWN0W10gcGF0aCA9IG5ldyBPYmplY3RbMl07DQogCXBhdGhbMF0gPSBEZXNpZ25lci50 aGVEZXNpZ25lcigpLmdldFRvRG9MaXN0KCk7DQogDQpAQCAtMTkxLDUgKzE5MiwzIEBADQogICAg IH0NCiANCiB9DQotDQotDQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29y Zy9hcmdvdW1sL2NvZ25pdGl2ZS91aS9Ub0RvQnlQcmlvcml0eS5qYXZhDQpVcmw6IGh0dHA6Ly9h cmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdvdW1s LWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL3VpL1RvRG9CeVByaW9yaXR5LmphdmE/dmll dz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZl L3VpL1RvRG9CeVByaW9yaXR5LmphdmEJKG9yaWdpbmFsKQ0KKysrIHRydW5rL3NyYy9hcmdvdW1s LWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL3VpL1RvRG9CeVByaW9yaXR5LmphdmEJMjAx Mi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMSw2ICsxLDYgQEANCiAvKiAkSWQkDQogICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA5IENvbnRyaWJ1dG9ycyAtIHNl ZSBiZWxvdw0KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEyIENvbnRyaWJ1dG9ycyAtIHNlZSBi ZWxvdw0KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29t cGFueWluZyBtYXRlcmlhbHMNCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAgKiB3aGljaCBhY2NvbXBhbmll cyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KQEAgLTM5LDggKzM5LDkg QEANCiBwYWNrYWdlIG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS51aTsNCiANCiBpbXBvcnQgamF2YS51 dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZh LnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2Vy Ow0KIGltcG9ydCBvcmcuYXJnb3VtbC5jb2duaXRpdmUuRGVzaWduZXI7DQogaW1wb3J0IG9yZy5h cmdvdW1sLmNvZ25pdGl2ZS5Ub0RvSXRlbTsNCiBpbXBvcnQgb3JnLmFyZ291bWwuY29nbml0aXZl LlRvRG9MaXN0RXZlbnQ7DQpAQCAtNTMsNyArNTQsNyBAQA0KIHB1YmxpYyBjbGFzcyBUb0RvQnlQ cmlvcml0eSBleHRlbmRzIFRvRG9QZXJzcGVjdGl2ZQ0KICAgICBpbXBsZW1lbnRzIFRvRG9MaXN0 TGlzdGVuZXIgew0KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCi0gICAg ICAgIExvZ2dlci5nZXRMb2dnZXIoVG9Eb0J5UHJpb3JpdHkuY2xhc3MpOw0KKyAgICAgICAgTG9n Z2VyLmdldExvZ2dlcihUb0RvQnlQcmlvcml0eS5jbGFzcy5nZXROYW1lKCkpOw0KIA0KICAgICAv KioNCiAgICAgICogVGhlIGNvbnN0cnVjdG9yLg0KQEAgLTcxLDcgKzcyLDcgQEANCiAgICAgICog QHNlZSBvcmcuYXJnb3VtbC5jb2duaXRpdmUuVG9Eb0xpc3RMaXN0ZW5lciN0b0RvSXRlbXNDaGFu Z2VkKG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5Ub0RvTGlzdEV2ZW50KQ0KICAgICAgKi8NCiAgICAg cHVibGljIHZvaWQgdG9Eb0l0ZW1zQ2hhbmdlZChUb0RvTGlzdEV2ZW50IHRkZSkgew0KLQlMT0cu ZGVidWcoInRvRG9JdGVtQ2hhbmdlZCIpOw0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAi dG9Eb0l0ZW1DaGFuZ2VkIik7DQogICAgICAgICBMaXN0PFRvRG9JdGVtPiBpdGVtcyA9IHRkZS5n ZXRUb0RvSXRlbUxpc3QoKTsNCiAJT2JqZWN0W10gcGF0aCA9IG5ldyBPYmplY3RbMl07DQogCXBh dGhbMF0gPSBEZXNpZ25lci50aGVEZXNpZ25lcigpLmdldFRvRG9MaXN0KCk7DQpAQCAtMTExLDcg KzExMiw3IEBADQogICAgICAqIEBzZWUgb3JnLmFyZ291bWwuY29nbml0aXZlLlRvRG9MaXN0TGlz dGVuZXIjdG9Eb0l0ZW1zQWRkZWQob3JnLmFyZ291bWwuY29nbml0aXZlLlRvRG9MaXN0RXZlbnQp DQogICAgICAqLw0KICAgICBwdWJsaWMgdm9pZCB0b0RvSXRlbXNBZGRlZChUb0RvTGlzdEV2ZW50 IHRkZSkgew0KLQlMT0cuZGVidWcoInRvRG9JdGVtQWRkZWQiKTsNCisgICAgICAgIExPRy5sb2co TGV2ZWwuRklORSwgInRvRG9JdGVtQWRkZWQiKTsNCiAJTGlzdDxUb0RvSXRlbT4gaXRlbXMgPSB0 ZGUuZ2V0VG9Eb0l0ZW1MaXN0KCk7DQogCU9iamVjdFtdIHBhdGggPSBuZXcgT2JqZWN0WzJdOw0K IAlwYXRoWzBdID0gRGVzaWduZXIudGhlRGVzaWduZXIoKS5nZXRUb0RvTGlzdCgpOw0KQEAgLTE1 MSw3ICsxNTIsNyBAQA0KICAgICAgKiBAc2VlIG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5Ub0RvTGlz dExpc3RlbmVyI3RvRG9JdGVtc1JlbW92ZWQob3JnLmFyZ291bWwuY29nbml0aXZlLlRvRG9MaXN0 RXZlbnQpDQogICAgICAqLw0KICAgICBwdWJsaWMgdm9pZCB0b0RvSXRlbXNSZW1vdmVkKFRvRG9M aXN0RXZlbnQgdGRlKSB7DQotCUxPRy5kZWJ1ZygidG9Eb0l0ZW1SZW1vdmVkIik7DQorICAgICAg ICBMT0cubG9nKExldmVsLkZJTkUsICJ0b0RvSXRlbVJlbW92ZWQiKTsNCiAgICAgICAgIExpc3Q8 VG9Eb0l0ZW0+IGl0ZW1zID0gdGRlLmdldFRvRG9JdGVtTGlzdCgpOw0KIAlPYmplY3RbXSBwYXRo ID0gbmV3IE9iamVjdFsyXTsNCiAJcGF0aFswXSA9IERlc2lnbmVyLnRoZURlc2lnbmVyKCkuZ2V0 VG9Eb0xpc3QoKTsNCkBAIC0xNzAsNyArMTcxLDcgQEANCiAJICAgIGlmICghYW55SW5QcmkpIHsN CiAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgfQ0KLQkgICAgTE9HLmRl YnVnKCJ0b0RvSXRlbVJlbW92ZWQgdXBkYXRpbmcgUHJpb3JpdHlOb2RlIik7DQorICAgICAgICAg ICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAidG9Eb0l0ZW1SZW1vdmVkIHVwZGF0aW5nIFByaW9yaXR5 Tm9kZSIpOw0KIAkgICAgcGF0aFsxXSA9IHBuOw0KIAkgICAgLy9maXJlVHJlZU5vZGVzQ2hhbmdl ZCh0aGlzLCBwYXRoLCBjaGlsZEluZGljZXMsIGNoaWxkcmVuKTsNCiAJICAgIGZpcmVUcmVlU3Ry dWN0dXJlQ2hhbmdlZChwYXRoKTsNCkBAIC0xODMsNiArMTg0LDMgQEANCiAgICAgcHVibGljIHZv aWQgdG9Eb0xpc3RDaGFuZ2VkKFRvRG9MaXN0RXZlbnQgdGRlKSB7IH0NCiANCiB9DQotDQotDQot DQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2NvZ25p dGl2ZS91aS9Ub0RvQnlUeXBlLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9z b3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3Vt bC9jb2duaXRpdmUvdWkvVG9Eb0J5VHlwZS5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIx PTE5OTA2JnIyPTE5OTA3DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJn b3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2NvZ25pdGl2ZS91aS9Ub0RvQnlUeXBlLmphdmEJKG9y aWdpbmFsKQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0 aXZlL3VpL1RvRG9CeVR5cGUuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYg KzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQg KGMpIDIwMDkgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5 LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4g VGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRl IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ug djEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZh aWxhYmxlIGF0DQpAQCAtMzksOCArMzksOSBAQA0KIHBhY2thZ2Ugb3JnLmFyZ291bWwuY29nbml0 aXZlLnVpOw0KIA0KIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCitpbXBvcnQgamF2YS51dGlsLmxv Z2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiANCi1pbXBv cnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmNvZ25pdGl2 ZS5EZXNpZ25lcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwuY29nbml0aXZlLlRvRG9JdGVtOw0KIGlt cG9ydCBvcmcuYXJnb3VtbC5jb2duaXRpdmUuVG9Eb0xpc3RFdmVudDsNCkBAIC01Myw3ICs1NCw3 IEBADQogcHVibGljIGNsYXNzIFRvRG9CeVR5cGUgZXh0ZW5kcyBUb0RvUGVyc3BlY3RpdmUNCiAg ICAgaW1wbGVtZW50cyBUb0RvTGlzdExpc3RlbmVyIHsNCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmlu YWwgTG9nZ2VyIExPRyA9DQotICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKFRvRG9CeVR5cGUuY2xh c3MpOw0KKyAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihUb0RvQnlUeXBlLmNsYXNzLmdldE5hbWUo KSk7DQogDQogICAgIC8qKg0KICAgICAgKiBUaGUgY29uc3RydWN0b3IuDQpAQCAtNzIsNyArNzMs NyBAQA0KICAgICAgKiBAc2VlIG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5Ub0RvTGlzdExpc3RlbmVy I3RvRG9JdGVtc0NoYW5nZWQob3JnLmFyZ291bWwuY29nbml0aXZlLlRvRG9MaXN0RXZlbnQpDQog ICAgICAqLw0KICAgICBwdWJsaWMgdm9pZCB0b0RvSXRlbXNDaGFuZ2VkKFRvRG9MaXN0RXZlbnQg dGRlKSB7DQotCUxPRy5kZWJ1ZygidG9Eb0l0ZW1zQ2hhbmdlZCIpOw0KKyAgICAgICAgTE9HLmxv ZyhMZXZlbC5GSU5FLCAidG9Eb0l0ZW1zQ2hhbmdlZCIpOw0KICAgICAgICAgTGlzdDxUb0RvSXRl bT4gaXRlbXMgPSB0ZGUuZ2V0VG9Eb0l0ZW1MaXN0KCk7DQogCU9iamVjdFtdIHBhdGggPSBuZXcg T2JqZWN0WzJdOw0KIAlwYXRoWzBdID0gRGVzaWduZXIudGhlRGVzaWduZXIoKS5nZXRUb0RvTGlz dCgpOw0KQEAgLTEwOSw3ICsxMTAsNyBAQA0KICAgICAgKiBAc2VlIG9yZy5hcmdvdW1sLmNvZ25p dGl2ZS5Ub0RvTGlzdExpc3RlbmVyI3RvRG9JdGVtc0FkZGVkKG9yZy5hcmdvdW1sLmNvZ25pdGl2 ZS5Ub0RvTGlzdEV2ZW50KQ0KICAgICAgKi8NCiAgICAgcHVibGljIHZvaWQgdG9Eb0l0ZW1zQWRk ZWQoVG9Eb0xpc3RFdmVudCB0ZGUpIHsNCi0JTE9HLmRlYnVnKCJ0b0RvSXRlbUFkZGVkIik7DQor ICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJ0b0RvSXRlbUFkZGVkIik7DQogICAgICAgICBM aXN0PFRvRG9JdGVtPiBpdGVtcyA9IHRkZS5nZXRUb0RvSXRlbUxpc3QoKTsNCiAJT2JqZWN0W10g cGF0aCA9IG5ldyBPYmplY3RbMl07DQogCXBhdGhbMF0gPSBEZXNpZ25lci50aGVEZXNpZ25lcigp LmdldFRvRG9MaXN0KCk7DQpAQCAtMTQ2LDcgKzE0Nyw3IEBADQogICAgICAqIEBzZWUgb3JnLmFy Z291bWwuY29nbml0aXZlLlRvRG9MaXN0TGlzdGVuZXIjdG9Eb0l0ZW1zUmVtb3ZlZChvcmcuYXJn b3VtbC5jb2duaXRpdmUuVG9Eb0xpc3RFdmVudCkNCiAgICAgICovDQogICAgIHB1YmxpYyB2b2lk IHRvRG9JdGVtc1JlbW92ZWQoVG9Eb0xpc3RFdmVudCB0ZGUpIHsNCi0JTE9HLmRlYnVnKCJ0b0Rv SXRlbVJlbW92ZWQiKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgInRvRG9JdGVtUmVt b3ZlZCIpOw0KICAgICAgICAgTGlzdDxUb0RvSXRlbT4gaXRlbXMgPSB0ZGUuZ2V0VG9Eb0l0ZW1M aXN0KCk7DQogCU9iamVjdFtdIHBhdGggPSBuZXcgT2JqZWN0WzJdOw0KIAlwYXRoWzBdID0gRGVz aWduZXIudGhlRGVzaWduZXIoKS5nZXRUb0RvTGlzdCgpOw0KQEAgLTE2Miw3ICsxNjMsNyBAQA0K IAkgICAgaWYgKCFhbnlJbktUKSB7DQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAg ICAgICAgIH0NCi0JICAgIExPRy5kZWJ1ZygidG9Eb0l0ZW1SZW1vdmVkIHVwZGF0aW5nIFByaW9y aXR5Tm9kZSIpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgInRvRG9JdGVtUmVt b3ZlZCB1cGRhdGluZyBQcmlvcml0eU5vZGUiKTsNCiAJICAgIHBhdGhbMV0gPSBrdG47DQogCSAg ICAvL2ZpcmVUcmVlTm9kZXNDaGFuZ2VkKHRoaXMsIHBhdGgsIGNoaWxkSW5kaWNlcywgY2hpbGRy ZW4pOw0KIAkgICAgZmlyZVRyZWVTdHJ1Y3R1cmVDaGFuZ2VkKHBhdGgpOw0KQEAgLTE3NSw1ICsx NzYsMyBAQA0KICAgICBwdWJsaWMgdm9pZCB0b0RvTGlzdENoYW5nZWQoVG9Eb0xpc3RFdmVudCB0 ZGUpIHsgfQ0KIA0KIH0NCi0NCi0NCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9z cmMvb3JnL2FyZ291bWwvY29nbml0aXZlL3VpL1RvRG9QYW5lLmphdmENClVybDogaHR0cDovL2Fy Z291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwt YXBwL3NyYy9vcmcvYXJnb3VtbC9jb2duaXRpdmUvdWkvVG9Eb1BhbmUuamF2YT92aWV3PWRpZmYm cGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot LS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9jb2duaXRpdmUvdWkvVG9E b1BhbmUuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcv YXJnb3VtbC9jb2duaXRpdmUvdWkvVG9Eb1BhbmUuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4 MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0g KiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJp Z2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0 cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0K ICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVi bGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9u LCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNDgsNiArNDgsOCBAQA0KIGltcG9ydCBqYXZhLnRl eHQuTWVzc2FnZUZvcm1hdDsNCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCiBpbXBvcnQg amF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9y dCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQogaW1wb3J0IGphdmF4LnN3aW5nLkJvcmRl ckZhY3Rvcnk7DQogaW1wb3J0IGphdmF4LnN3aW5nLkpDb21ib0JveDsNCkBAIC02MSw3ICs2Myw2 IEBADQogaW1wb3J0IGphdmF4LnN3aW5nLnRyZWUuVHJlZU1vZGVsOw0KIGltcG9ydCBqYXZheC5z d2luZy50cmVlLlRyZWVQYXRoOw0KIA0KLWltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsN CiBpbXBvcnQgb3JnLmFyZ291bWwuY29nbml0aXZlLkRlc2lnbmVyOw0KIGltcG9ydCBvcmcuYXJn b3VtbC5jb2duaXRpdmUuVG9Eb0l0ZW07DQogaW1wb3J0IG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5U b0RvTGlzdDsNCkBAIC0xMDQsNyArMTA1LDggQEANCiAgICAgLyoqDQogICAgICAqIExvZ2dlci4N CiAgICAgICovDQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dnZXIu Z2V0TG9nZ2VyKFRvRG9QYW5lLmNsYXNzKTsNCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9n Z2VyIExPRyA9DQorICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKFRvRG9QYW5lLmNsYXNzLmdldE5h bWUoKSk7DQogDQogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBXQVJOX1RIUkVTSE9MRCA9 IDUwOw0KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUxBUk1fVEhSRVNIT0xEID0gMTAw Ow0KQEAgLTEzMSwxNCArMTMzLDE0IEBADQogICAgIC8qKg0KICAgICAgKiBDb25zdHJ1Y3QgdGhl IFRvRG9QYW5lLg0KICAgICAgKiBAcGFyYW0gc3BsYXNoIFVudXNlZCBwYXJhbWV0ZXIgZm9yIGJh Y2t3YXJkcyBjb21wYXRpYmlsaXR5Lg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQGRlcHJl Y2F0ZWQgZm9yIDAuMzEuNyBieSB0Zm1vcnJpcy4gIFVzZSAwLWFyZyBjb25zdHJ1Y3Rvci4NCiAg ICAgICovDQogICAgIEBEZXByZWNhdGVkDQogICAgIHB1YmxpYyBUb0RvUGFuZShAU3VwcHJlc3NX YXJuaW5ncygidW51c2VkIikgU3BsYXNoU2NyZWVuIHNwbGFzaCkgew0KICAgICAgICAgdGhpcygp Ow0KICAgICB9DQotICAgIA0KKw0KICAgICAvKioNCiAgICAgICogQ29uc3RydWN0IHRoZSBUb0Rv UGFuZS4NCiAgICAgICovDQpAQCAtMjAzLDcgKzIwNSw3IEBADQogICAgIHB1YmxpYyBMaXN0PFRv RG9QZXJzcGVjdGl2ZT4gZ2V0UGVyc3BlY3RpdmVMaXN0KCkgew0KICAgICAgICAgcmV0dXJuIHBl cnNwZWN0aXZlczsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIEBwYXJhbSBw ZXJzIHRoZSBwZXJzcGVjdGl2ZXMNCiAgICAgICovDQpAQCAtMjI4LDcgKzIzMCw3IEBADQogICAg ICAgICB9DQogICAgICAgICB1cGRhdGVUcmVlKCk7DQogICAgIH0NCi0gICAgDQorDQogICAgIC8q Kg0KICAgICAgKiBAcmV0dXJuIHRoZSBjdXJyZW50IHBlcnNwZWN0aXZlcw0KICAgICAgKi8NCkBA IC0zMDAsMTMgKzMwMiwxMyBAQA0KICAgICAgKiBAc2VlIGphdmF4LnN3aW5nLmV2ZW50LlRyZWVT ZWxlY3Rpb25MaXN0ZW5lciN2YWx1ZUNoYW5nZWQoamF2YXguc3dpbmcuZXZlbnQuVHJlZVNlbGVj dGlvbkV2ZW50KQ0KICAgICAgKi8NCiAgICAgcHVibGljIHZvaWQgdmFsdWVDaGFuZ2VkKFRyZWVT ZWxlY3Rpb25FdmVudCBlKSB7DQotICAgICAgICBMT0cuZGVidWcoIlRvRG9QYW5lIHZhbHVlQ2hh bmdlZCIpOw0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiVG9Eb1BhbmUgdmFsdWVDaGFu Z2VkIik7DQogICAgICAgICAvL1RPRE86IHNob3VsZCBmaXJlIGl0cyBvd24gZXZlbnQgYW5kIFBy b2plY3RCcm93c2VyDQogICAgICAgICAvL3Nob3VsZCByZWdpc3RlciBhIGxpc3RlbmVyIC0gdGZt DQogICAgICAgICBPYmplY3Qgc2VsID0gZ2V0U2VsZWN0ZWRPYmplY3QoKTsNCiAgICAgICAgIFBy b2plY3RCcm93c2VyLmdldEluc3RhbmNlKCkuc2V0VG9Eb0l0ZW0oc2VsKTsNCi0gICAgICAgIExP Ry5kZWJ1ZygibGFzdHNlbGVjdGlvbjogIiArIGxhc3RTZWwpOw0KLQlMT0cuZGVidWcoInNlbDog IiArIHNlbCk7DQorICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJsYXN0c2VsZWN0aW9uOiB7 MH0iLCBsYXN0U2VsKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgInNlbDogezB9Iiwg c2VsKTsNCiAgICAgICAgIGlmIChsYXN0U2VsIGluc3RhbmNlb2YgVG9Eb0l0ZW0pIHsNCiAJICAg ICgoVG9Eb0l0ZW0pIGxhc3RTZWwpLmRlc2VsZWN0KCk7DQogCX0NCkBAIC0zMjEsMjggKzMyMywy OCBAQA0KICAgICAvKg0KICAgICAgKiBAc2VlIGphdmEuYXd0LmV2ZW50Lk1vdXNlTGlzdGVuZXIj bW91c2VQcmVzc2VkKGphdmEuYXd0LmV2ZW50Lk1vdXNlRXZlbnQpDQogICAgICAqLw0KLSAgICBw dWJsaWMgdm9pZCBtb3VzZVByZXNzZWQoTW91c2VFdmVudCBlKSB7IA0KKyAgICBwdWJsaWMgdm9p ZCBtb3VzZVByZXNzZWQoTW91c2VFdmVudCBlKSB7DQogICAgICAgICAvLyBFbXB0eSBpbXBsZW1l bnRhdGlvbi4NCiAgICAgfQ0KIA0KICAgICAvKg0KICAgICAgKiBAc2VlIGphdmEuYXd0LmV2ZW50 Lk1vdXNlTGlzdGVuZXIjbW91c2VSZWxlYXNlZChqYXZhLmF3dC5ldmVudC5Nb3VzZUV2ZW50KQ0K ICAgICAgKi8NCi0gICAgcHVibGljIHZvaWQgbW91c2VSZWxlYXNlZChNb3VzZUV2ZW50IGUpIHsg IA0KKyAgICBwdWJsaWMgdm9pZCBtb3VzZVJlbGVhc2VkKE1vdXNlRXZlbnQgZSkgew0KICAgICAg ICAgLy8gRW1wdHkgaW1wbGVtZW50YXRpb24uDQogICAgIH0NCiANCiAgICAgLyoNCiAgICAgICog QHNlZSBqYXZhLmF3dC5ldmVudC5Nb3VzZUxpc3RlbmVyI21vdXNlRW50ZXJlZChqYXZhLmF3dC5l dmVudC5Nb3VzZUV2ZW50KQ0KICAgICAgKi8NCi0gICAgcHVibGljIHZvaWQgbW91c2VFbnRlcmVk KE1vdXNlRXZlbnQgZSkgeyAgDQorICAgIHB1YmxpYyB2b2lkIG1vdXNlRW50ZXJlZChNb3VzZUV2 ZW50IGUpIHsNCiAgICAgICAgIC8vIEVtcHR5IGltcGxlbWVudGF0aW9uLg0KICAgICB9DQogDQog ICAgIC8qDQogICAgICAqIEBzZWUgamF2YS5hd3QuZXZlbnQuTW91c2VMaXN0ZW5lciNtb3VzZUV4 aXRlZChqYXZhLmF3dC5ldmVudC5Nb3VzZUV2ZW50KQ0KICAgICAgKi8NCi0gICAgcHVibGljIHZv aWQgbW91c2VFeGl0ZWQoTW91c2VFdmVudCBlKSB7IA0KKyAgICBwdWJsaWMgdm9pZCBtb3VzZUV4 aXRlZChNb3VzZUV2ZW50IGUpIHsNCiAgICAgICAgIC8vIEVtcHR5IGltcGxlbWVudGF0aW9uLg0K ICAgICB9DQogDQpAQCAtMzc0LDcgKzM3Niw3IEBADQogICAgICAqIFRoaXMgaXMgbmVjZXNzYXJ5 IGJlY2F1c2UgZXZlbnQgbm90aWZpY2F0aW9uIG9mIFRvRG9MaXN0ZW5lciBldmVudHMgaXMNCiAg ICAgICogbGlrZWx5IHRvIGJlIGNvbWluZyBmcm9tIHRoZSBUb0RvIFZhbGlkaXR5IENoZWNrZXIg dGhyZWFkIHJ1bm5pbmcgaW4gdGhlDQogICAgICAqIGJhY2tncm91bmQuDQotICAgICAqIA0KKyAg ICAgKg0KICAgICAgKiBAcGFyYW0gdGFzayBhIFJ1bm5hYmxlIHRhc2sgd2hvJ3MgcnVuKCkgbWV0 aG9kIHdpbGwgYmUgaW52b2tlZA0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSB2b2lkIHN3aW5nSW52 b2tlKFJ1bm5hYmxlIHRhc2spIHsNCkBAIC0zODQsNyArMzg2LDcgQEANCiAgICAgICAgICAgICBT d2luZ1V0aWxpdGllcy5pbnZva2VMYXRlcih0YXNrKTsNCiAgICAgICAgIH0NCiAgICAgfQ0KLSAg ICANCisNCiAgICAgLyoNCiAgICAgICogQHNlZSBvcmcuYXJnb3VtbC5jb2duaXRpdmUuVG9Eb0xp c3RMaXN0ZW5lciN0b0RvSXRlbXNDaGFuZ2VkKG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5Ub0RvTGlz dEV2ZW50KQ0KICAgICAgKi8NCkBAIC00MTAsNyArNDEyLDcgQEANCiAgICAgICAgICAgICAgICAg fQ0KICAgICAgICAgICAgICAgICBMaXN0PFRvRG9JdGVtPiBpdGVtcyA9IHRkZS5nZXRUb0RvSXRl bUxpc3QoKTsNCiAgICAgICAgICAgICAgICAgZm9yIChUb0RvSXRlbSB0b2RvIDogaXRlbXMpIHsN Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0b2RvLmdldFByaW9yaXR5KCkgDQorICAgICAgICAg ICAgICAgICAgICBpZiAodG9kby5nZXRQcmlvcml0eSgpDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgID49IFRvRG9JdGVtLklOVEVSUlVQVElWRV9QUklPUklUWSkgew0KICAgICAgICAgICAg ICAgICAgICAgICAgIC8vIGtlZXAgbmFnZ2luZyB1bnRpbCB0aGUgdXNlciBzb2x2ZXMgdGhlIHBy b2JsZW06DQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzZWVtcyBhIG5pY2Ugd2F5 IHRvIG5hZzoNCkBAIC00MjIsNyArNDI0LDcgQEANCiAgICAgICAgICAgICB9DQogICAgICAgICB9 KTsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgLyoNCiAgICAgICogQHNlZSBvcmcuYXJnb3VtbC5j b2duaXRpdmUuVG9Eb0xpc3RMaXN0ZW5lciN0b0RvSXRlbXNSZW1vdmVkKG9yZy5hcmdvdW1sLmNv Z25pdGl2ZS5Ub0RvTGlzdEV2ZW50KQ0KICAgICAgKi8NCkBAIC00OTEsNyArNDkzLDcgQEANCiAg ICAgICAgIGlmIChjdXJQZXJzcGVjdGl2ZSA9PSBudWxsKSB7DQogICAgICAgICAgICAgdHJlZS5z ZXRWaXNpYmxlKGZhbHNlKTsNCiAJfSBlbHNlIHsNCi0gICAgICAgICAgICBMT0cuZGVidWcoIlRv RG9QYW5lIHNldHRpbmcgdHJlZSBtb2RlbCIpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwu RklORSwgIlRvRG9QYW5lIHNldHRpbmcgdHJlZSBtb2RlbCIpOw0KICAgICAgICAgICAgIGN1clBl cnNwZWN0aXZlLnNldFJvb3Qocm9vdCk7DQogICAgICAgICAgICAgdHJlZS5zZXRTaG93c1Jvb3RI YW5kbGVzKHRydWUpOw0KICAgICAgICAgICAgIHRyZWUuc2V0TW9kZWwoY3VyUGVyc3BlY3RpdmUp Ow0KQEAgLTUxNyw3ICs1MTksNyBAQA0KICAgICAgKiBAcGFyYW0gcGF0aCB0aGUgcGF0aCBpbiB0 aGUgdHJlZSBvZiB0aGUgc2VsZWN0ZWQgaXRlbQ0KICAgICAgKi8NCiAgICAgcHVibGljIHN0YXRp YyB2b2lkIG15U2luZ2xlQ2xpY2soDQotICAgICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVu dXNlZCIpIGludCByb3csIA0KKyAgICAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQi KSBpbnQgcm93LA0KICAgICAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBUcmVl UGF0aCBwYXRoKSB7DQogICAgICAgICBjbGlja3NJblRvRG9QYW5lKys7DQogICAgIH0NCkBAIC01 MzAsNyArNTMyLDcgQEANCiAgICAgICogQHBhcmFtIHBhdGggdGhlIHBhdGggaW4gdGhlIHRyZWUg b2YgdGhlIHNlbGVjdGVkIGl0ZW0NCiAgICAgICovDQogICAgIHB1YmxpYyB2b2lkIG15RG91Ymxl Q2xpY2soDQotICAgICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGludCByb3cs IA0KKyAgICAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBpbnQgcm93LA0KICAg ICAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBUcmVlUGF0aCBwYXRoKSB7DQog ICAgICAgICBkYmxDbGlja3NJblRvRG9QYW5lKys7DQogICAgICAgICBpZiAoZ2V0U2VsZWN0ZWRP YmplY3QoKSA9PSBudWxsKSB7DQpAQCAtNTQzLDcgKzU0NSw3IEBADQogDQogICAgICAgICAvL1RP RE86IHNob3VsZCBmaXJlIGl0cyBvd24gZXZlbnQgYW5kIFByb2plY3RCcm93c2VyDQogICAgICAg ICAvL1RPRE86IHNob3VsZCByZWdpc3RlciBhIGxpc3RlbmVyDQotICAgICAgICBMT0cuZGVidWco IjI6ICIgKyBnZXRTZWxlY3RlZE9iamVjdCgpLnRvU3RyaW5nKCkpOw0KKyAgICAgICAgTE9HLmxv ZyhMZXZlbC5GSU5FLCAiMjogezB9IiwgZ2V0U2VsZWN0ZWRPYmplY3QoKSApOw0KICAgICB9DQog DQogICAgIC8qKg0KDQpNb2RpZmllZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJn b3VtbC9jb2duaXRpdmUvdWkvVG9Eb1BlcnNwZWN0aXZlLmphdmENClVybDogaHR0cDovL2FyZ291 bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBw L3NyYy9vcmcvYXJnb3VtbC9jb2duaXRpdmUvdWkvVG9Eb1BlcnNwZWN0aXZlLmphdmE/dmlldz1k aWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL3Vp L1RvRG9QZXJzcGVjdGl2ZS5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1h cHAvc3JjL29yZy9hcmdvdW1sL2NvZ25pdGl2ZS91aS9Ub0RvUGVyc3BlY3RpdmUuamF2YQkyMDEy LTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0b3JzIC0gc2Vl IGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJl bG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21w YW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVz IHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNDAsOCArNDAsOSBA QA0KIA0KIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KIGltcG9ydCBqYXZhLnV0aWwuTGlz dDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5s b2dnaW5nLkxvZ2dlcjsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1w b3J0IG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5Ub0RvSXRlbTsNCiBpbXBvcnQgb3JnLmFyZ291bWwu dWkuVHJlZU1vZGVsQ29tcG9zaXRlOw0KIA0KQEAgLTU1LDcgKzU2LDggQEANCiAgICAgLyoqDQog ICAgICAqIExvZ2dlci4NCiAgICAgICovDQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dl ciBMT0cgPSBMb2dnZXIuZ2V0TG9nZ2VyKFRvRG9QZXJzcGVjdGl2ZS5jbGFzcyk7DQorICAgIHBy aXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KKyAgICAgICAgTG9nZ2VyLmdldExvZ2dl cihUb0RvUGVyc3BlY3RpdmUuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KICAg ICAvLyBpbnN0YW5jZSB2YXJpYWJsZXMNCkBAIC0xNjMsNyArMTY1LDcgQEANCiAgICAgICAgIGlm IChub2RlID09IG51bGwpIHsNCiAJICAgIHJldHVybjsNCiAJfQ0KLSAgICAgICAgTE9HLmRlYnVn KCJhZGRGbGF0Q2hpbGRyZW4iKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgImFkZEZs YXRDaGlsZHJlbiIpOw0KICAgICAgICAgLy8gaGFjayBmb3IgdG8gZG8gaXRlbXMgb25seSwgc2hv dWxkIGNoZWNrIGlzTGVhZihub2RlKSwgYnV0IHRoYXQNCiAgICAgICAgIC8vIGluY2x1ZGVzIGVt cHR5IGZvbGRlcnMuIFJlYWxseSBJIG5lZWQgYWx3YXlzTGVhZihub2RlKS4NCiAgICAgICAgIGlm ICgobm9kZSBpbnN0YW5jZW9mIFRvRG9JdGVtKSAmJiAhZmxhdENoaWxkcmVuLmNvbnRhaW5zKG5v ZGUpKSB7DQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1s L2NvZ25pdGl2ZS91aS9XaXpEZXNjcmlwdGlvbi5qYXZhDQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRp Z3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMv b3JnL2FyZ291bWwvY29nbml0aXZlL3VpL1dpekRlc2NyaXB0aW9uLmphdmE/dmlldz1kaWZmJnBh dGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29nbml0aXZlL3VpL1dpekRl c2NyaXB0aW9uLmphdmEJKG9yaWdpbmFsKQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMv b3JnL2FyZ291bWwvY29nbml0aXZlL3VpL1dpekRlc2NyaXB0aW9uLmphdmEJMjAxMi0xMi0zMCAw NTowNjowMS0wODAwDQpAQCAtMSw2ICsxLDYgQEANCiAvKiAkSWQkDQogICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA5IENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0K KyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEyIENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KICAq IEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBt YXRlcmlhbHMNCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBF Y2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRp c3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KQEAgLTQwLDExICs0MCwxMiBAQA0KIA0K IGltcG9ydCBqYXZhLmF3dC5Cb3JkZXJMYXlvdXQ7DQogaW1wb3J0IGphdmEudGV4dC5NZXNzYWdl Rm9ybWF0Ow0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51 dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KIA0KIGltcG9ydCBqYXZheC5zd2luZy5KU2Nyb2xsUGFuZTsN CiBpbXBvcnQgamF2YXguc3dpbmcuSlRleHRBcmVhOw0KIA0KLWltcG9ydCBvcmcuYXBhY2hlLmxv ZzRqLkxvZ2dlcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwuY29nbml0aXZlLkNyaXRpYzsNCiBpbXBv cnQgb3JnLmFyZ291bWwuY29nbml0aXZlLkRlY2lzaW9uOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5j b2duaXRpdmUuR29hbDsNCkBAIC02NSw3ICs2Niw4IEBADQogICAgIC8qKg0KICAgICAgKiBMb2dn ZXIuDQogICAgICAqLw0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9n Z2VyLmdldExvZ2dlcihXaXpEZXNjcmlwdGlvbi5jbGFzcyk7DQorICAgIHByaXZhdGUgc3RhdGlj IGZpbmFsIExvZ2dlciBMT0cgPQ0KKyAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihXaXpEZXNjcmlw dGlvbi5jbGFzcy5nZXROYW1lKCkpOw0KIA0KICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQogICAgIC8vIGluc3RhbmNl IHZhcmlhYmxlcw0KQEAgLTc5LDcgKzgxLDcgQEANCiAgICAgICovDQogICAgIHB1YmxpYyBXaXpE ZXNjcmlwdGlvbigpIHsNCiAJc3VwZXIoKTsNCi0JTE9HLmluZm8oIm1ha2luZyBXaXpEZXNjcmlw dGlvbiIpOw0KKwlMT0cubG9nKExldmVsLklORk8sICJtYWtpbmcgV2l6RGVzY3JpcHRpb24iKTsN CiANCiAJZGVzY3JpcHRpb24uc2V0TGluZVdyYXAodHJ1ZSk7DQogCWRlc2NyaXB0aW9uLnNldFdy YXBTdHlsZVdvcmQodHJ1ZSk7DQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3Jj L29yZy9hcmdvdW1sL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbkZhY3RvcnkuamF2YQ0KVXJs OiBodHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9z cmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlv bkZhY3RvcnkuamF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcv YXJnb3VtbC9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb25GYWN0b3J5LmphdmEJKG9yaWdpbmFs KQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29uZmlndXJhdGlv bi9Db25maWd1cmF0aW9uRmFjdG9yeS5qYXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAg LTEsNiArMSw2IEBADQogLyogJElkJA0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHly aWdodCAoYykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMp IDIwMDktMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2Vy dmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJl IG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGlj ZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBp cyBhdmFpbGFibGUgYXQNCkBAIC0zOSw3ICszOSw3IEBADQogDQogcGFja2FnZSBvcmcuYXJnb3Vt bC5jb25maWd1cmF0aW9uOw0KIA0KLWltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsNCitp bXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KIA0KIC8qKg0KICAqIEEgZmFjdG9yeSBv YmplY3QgdGhhdCBwcm92aWRlcyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLg0KQEAgLTcyLDkg KzcyLDEwIEBADQogICAgICAgICAgICAgICAgIG5ld0ZhY3RvcnkgPQ0KICAgICAgICAgICAgICAg ICAgICAgKElDb25maWd1cmF0aW9uRmFjdG9yeSkgQ2xhc3MuZm9yTmFtZShuYW1lKS5uZXdJbnN0 YW5jZSgpOw0KICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAg ICAgICAgIExvZ2dlci5nZXRMb2dnZXIoQ29uZmlndXJhdGlvbkZhY3RvcnkuY2xhc3MpLg0KLSAg ICAgICAgICAgICAgICAgICAgd2FybigiQ2FuJ3QgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZmFjdG9y eSAiDQotICAgICAgICAgICAgICAgICAgICAgICAgKyBuYW1lICsgIiwgdXNpbmcgZGVmYXVsdCBm YWN0b3J5Iik7DQorICAgICAgICAgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoQ29uZmlndXJhdGlv bkZhY3RvcnkuY2xhc3MuZ2V0TmFtZSgpKS4NCisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmco IkNhbid0IGNyZWF0ZSBjb25maWd1cmF0aW9uIGZhY3RvcnkgIg0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICArIG5hbWUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCB1c2lu ZyBkZWZhdWx0IGZhY3RvcnkiKTsNCiAgICAgICAgICAgICB9DQogICAgICAgICB9DQogICAgICAg ICBpZiAobmV3RmFjdG9yeSA9PSBudWxsKSB7DQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3Vt bC1hcHAvc3JjL29yZy9hcmdvdW1sL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbkhhbmRsZXIu amF2YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3Vt bC90cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2NvbmZpZ3VyYXRpb24vQ29u ZmlndXJhdGlvbkhhbmRsZXIuamF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZy Mj0xOTkwNw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBw L3NyYy9vcmcvYXJnb3VtbC9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb25IYW5kbGVyLmphdmEJ KG9yaWdpbmFsKQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29u ZmlndXJhdGlvbi9Db25maWd1cmF0aW9uSGFuZGxlci5qYXZhCTIwMTItMTItMzAgMDU6MDY6MDEt MDgwMA0KQEAgLTEsNiArMSw2IEBADQogLyogJElkJA0KICAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0K LSAqIENvcHlyaWdodCAoYykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5 cmlnaHQgKGMpIDIwMDktMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmln aHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxz DQogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQ dWJsaWMgTGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRp b24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCkBAIC00Miw4ICs0Miw4IEBADQogaW1wb3J0IGphdmEu YmVhbnMuUHJvcGVydHlDaGFuZ2VTdXBwb3J0Ow0KIGltcG9ydCBqYXZhLmlvLkZpbGU7DQogaW1w b3J0IGphdmEubmV0LlVSTDsNCi0NCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQor aW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2lu Zy5Mb2dnZXI7DQogDQogLyoqDQogICogICBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgdXNlciBjb25m aWd1cmF0aW9uIGJhc2VkIHVwb24gcHJvcGVydGllcy4NCkBAIC05Nyw3ICs5Nyw3IEBADQogICAg ICAqIExvZ2dlci4NCiAgICAgICovDQogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBM T0cgPQ0KLSAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihDb25maWd1cmF0aW9uSGFuZGxlci5jbGFz cyk7DQorICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKENvbmZpZ3VyYXRpb25IYW5kbGVyLmNsYXNz LmdldE5hbWUoKSk7DQogDQogICAgIC8qKg0KICAgICAgKiBBbm9ueW1vdXMgY29uc3RydWN0b3Ig YWxsb3dzIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4NCkBAIC00MzYsNyArNDM2LDcgQEANCiAgICAg ICAgIGlmIChwY2wgPT0gbnVsbCkgew0KICAgICAgICAgICAgIHBjbCA9IG5ldyBQcm9wZXJ0eUNo YW5nZVN1cHBvcnQodGhpcyk7DQogICAgICAgICB9DQotICAgICAgICBMT0cuZGVidWcoImFkZFBy b3BlcnR5Q2hhbmdlTGlzdGVuZXIoIiArIHAgKyAiKSIpOw0KKyAgICAgICAgTE9HLmxvZyhMZXZl bC5GSU5FLCAiYWRkUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcih7MH0pIiwgcCk7DQogICAgICAgICBw Y2wuYWRkUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihwKTsNCiAgICAgfQ0KIA0KQEAgLTQ0Nyw3ICs0 NDcsNyBAQA0KICAgICAgKi8NCiAgICAgcHVibGljIGZpbmFsIHZvaWQgcmVtb3ZlTGlzdGVuZXIo UHJvcGVydHlDaGFuZ2VMaXN0ZW5lciBwKSB7DQogICAgICAgICBpZiAocGNsICE9IG51bGwpIHsN Ci0gICAgICAgICAgICBMT0cuZGVidWcoInJlbW92ZVByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoKSIp Ow0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgInJlbW92ZVByb3BlcnR5Q2hhbmdl TGlzdGVuZXIoKSIpOw0KICAgICAgICAgICAgIHBjbC5yZW1vdmVQcm9wZXJ0eUNoYW5nZUxpc3Rl bmVyKHApOw0KICAgICAgICAgfQ0KICAgICB9DQpAQCAtNDYzLDggKzQ2Myw3IEBADQogICAgICAg ICBpZiAocGNsID09IG51bGwpIHsNCiAgICAgICAgICAgICBwY2wgPSBuZXcgUHJvcGVydHlDaGFu Z2VTdXBwb3J0KHRoaXMpOw0KICAgICAgICAgfQ0KLSAgICAgICAgTE9HLmRlYnVnKCJhZGRQcm9w ZXJ0eUNoYW5nZUxpc3RlbmVyKCINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsg a2V5LmdldEtleSgpICsgIikiKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgImFkZFBy b3BlcnR5Q2hhbmdlTGlzdGVuZXIoezB9KSIsIGtleS5nZXRLZXkoKSk7DQogICAgICAgICBwY2wu YWRkUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihrZXkuZ2V0S2V5KCksIHApOw0KICAgICB9DQogDQpA QCAtNDc3LDggKzQ3Niw3IEBADQogICAgIHB1YmxpYyBmaW5hbCB2b2lkIHJlbW92ZUxpc3RlbmVy KENvbmZpZ3VyYXRpb25LZXkga2V5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyIHApIHsNCiAgICAgICAgIGlmIChwY2wgIT0gbnVs bCkgew0KLSAgICAgICAgICAgIExPRy5kZWJ1ZygicmVtb3ZlUHJvcGVydHlDaGFuZ2VMaXN0ZW5l cigiDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBrZXkuZ2V0S2V5KCkg KyAiKSIpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgInJlbW92ZVByb3BlcnR5 Q2hhbmdlTGlzdGVuZXIoezB9KSIsIGtleS5nZXRLZXkoKSk7DQogICAgICAgICAgICAgcGNsLnJl bW92ZVByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoa2V5LmdldEtleSgpLCBwKTsNCiAgICAgICAgIH0N CiAgICAgfQ0KQEAgLTU3Nyw1ICs1NzUsMyBAQA0KICAgICAgKi8NCiAgICAgcHVibGljIGFic3Ry YWN0IHZvaWQgcmVtb3ZlKFN0cmluZyBrZXkpOw0KIH0NCi0NCi0NCg0KTW9kaWZpZWQ6IHRydW5r L3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29uZmlndXJhdGlvbi9Db25maWd1cmF0 aW9uUHJvcGVydGllcy5qYXZhDQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNl L2Jyb3dzZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvY29u ZmlndXJhdGlvbi9Db25maWd1cmF0aW9uUHJvcGVydGllcy5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2 PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVu ay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2NvbmZpZ3VyYXRpb24vQ29uZmlndXJh dGlvblByb3BlcnRpZXMuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBw L3NyYy9vcmcvYXJnb3VtbC9jb25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzLmph dmEJMjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMSw2ICsxLDYgQEANCiAvKiAkSWQkDQog ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA5IENvbnRyaWJ1dG9y cyAtIHNlZSBiZWxvdw0KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEyIENvbnRyaWJ1dG9ycyAt IHNlZSBiZWxvdw0KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhl IGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAgKiB3aGljaCBhY2Nv bXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KQEAgLTQ1LDEz ICs0NSwxMyBAQA0KIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KIGltcG9ydCBqYXZhLm5l dC5VUkw7DQogaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOw0KLQ0KLWltcG9ydCBvcmcuYXBh Y2hlLmxvZzRqLkxvZ2dlcjsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1w b3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiANCiAvKioNCi0gKiBUaGlzIGNsYXNzIHBy b3ZpZGVzIGEgdXNlciBjb25maWd1cmF0aW9uIGJhc2VkIHVwb24gDQorICogVGhpcyBjbGFzcyBw cm92aWRlcyBhIHVzZXIgY29uZmlndXJhdGlvbiBiYXNlZCB1cG9uDQogICogdGhlIHByb3BlcnRp ZXMgZmlsZSAiYXJnby51c2VyLnByb3BlcnRpZXMiIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3Rv cnkuDQotICogDQorICoNCiAgKiBAYXV0aG9yIFRoaWVycnkgTGFjaA0KICAqLw0KIGNsYXNzIENv bmZpZ3VyYXRpb25Qcm9wZXJ0aWVzIGV4dGVuZHMgQ29uZmlndXJhdGlvbkhhbmRsZXIgew0KQEAg LTU5LDcgKzU5LDcgQEANCiAgICAgICogTG9nZ2VyLg0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSBz dGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9DQotICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKENvbmZp Z3VyYXRpb25Qcm9wZXJ0aWVzLmNsYXNzKTsNCisgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoQ29u ZmlndXJhdGlvblByb3BlcnRpZXMuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgLyoqDQogICAg ICAqIFRoZSBsb2NhdGlvbiBvZiBBcmdvJ3MgZGVmYXVsdCBwcm9wZXJ0aWVzIHJlc291cmNlLg0K QEAgLTg3LDEwICs4NywxMiBAQA0KICAgICAgICAgUHJvcGVydGllcyBkZWZhdWx0cyA9IG5ldyBQ cm9wZXJ0aWVzKCk7DQogICAgICAgICB0cnkgew0KICAgICAgICAgICAgIGRlZmF1bHRzLmxvYWQo Z2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKHByb3BlcnR5TG9jYXRpb24pKTsNCi0gICAg ICAgICAgICBMT0cuZGVidWcoIkNvbmZpZ3VyYXRpb24gbG9hZGVkIGZyb20gIiArIHByb3BlcnR5 TG9jYXRpb24pOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwNCisgICAgICAgICAg ICAgICAgICAgICJDb25maWd1cmF0aW9uIGxvYWRlZCBmcm9tIHswfSIsIHByb3BlcnR5TG9jYXRp b24pOw0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGlvZSkgew0KICAgICAgICAgICAgIC8v IFRPRE86ICBXaGF0IHNob3VsZCB3ZSBkbyBoZXJlPw0KLSAgICAgICAgICAgIExPRy53YXJuKCJD b25maWd1cmF0aW9uIG5vdCBsb2FkZWQgZnJvbSAiICsgcHJvcGVydHlMb2NhdGlvbiwgaW9lKTsN CisgICAgICAgICAgICBMT0cubG9nKExldmVsLldBUk5JTkcsDQorICAgICAgICAgICAgICAgICAg ICAiQ29uZmlndXJhdGlvbiBub3QgbG9hZGVkIGZyb20gIiArIHByb3BlcnR5TG9jYXRpb24sIGlv ZSk7DQogICAgICAgICB9DQogICAgICAgICBwcm9wZXJ0eUJ1bmRsZSA9IG5ldyBQcm9wZXJ0aWVz KGRlZmF1bHRzKTsNCiAgICAgfQ0KQEAgLTEwMSw3ICsxMDMsNyBAQA0KICAgICAgKiBAcmV0dXJu IGEgZ2VuZXJpYyBwYXRoIHN0cmluZy4NCiAgICAgICovDQogICAgIHB1YmxpYyBTdHJpbmcgZ2V0 RGVmYXVsdFBhdGgoKSB7DQotICAgICAgICByZXR1cm4gU3lzdGVtLmdldFByb3BlcnR5KCJ1c2Vy LmhvbWUiKSANCisgICAgICAgIHJldHVybiBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIuaG9tZSIp DQogICAgICAgICAgICAgKyAiLy5hcmdvdW1sL2FyZ28udXNlci5wcm9wZXJ0aWVzIjsNCiAgICAg fQ0KIA0KQEAgLTExNSw5ICsxMTcsOSBAQA0KIA0KICAgICAvKioNCiAgICAgICogQ29weSBhIGZp bGUgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24uDQotICAgICAqIA0KKyAgICAgKg0KICAgICAg KiBUT0RPOiBQZXJoYXBzIGJlbG9uZ3MgaW4gYSB1dGlsaXRpZXMgY2xhc3Mgb2Ygc29tZSBzb3J0 Lg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIHNvdXJjZSB0aGUgc291cmNlIGZp bGUgdG8gYmUgY29waWVkDQogICAgICAqIEBwYXJhbSBkZXN0IHRoZSBkZXN0aW5hdGlvbiBmaWxl DQogICAgICAqIEByZXR1cm4gc3VjY2VzcyBzdGF0dXMgZmxhZw0KQEAgLTEzNSw3OCArMTM3LDgy IEBADQogICAgICAgICAgICAgZm9zLmNsb3NlKCk7DQogICAgICAgICAgICAgcmV0dXJuIHRydWU7 DQogICAgICAgICB9IGNhdGNoIChmaW5hbCBGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgew0KLSAg ICAgICAgICAgIExPRy5lcnJvcigiRmlsZSBub3QgZm91bmQgd2hpbGUgY29weWluZyIsIGUpOw0K KyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiRmlsZSBub3QgZm91bmQgd2hpbGUg Y29weWluZyIsIGUpOw0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgIH0gY2F0 Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICBMT0cuZXJyb3IoIklPIGVy cm9yIGNvcHlpbmcgZmlsZSIsIGUpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJF LCAiSU8gZXJyb3IgY29weWluZyBmaWxlIiwgZSk7DQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl Ow0KICAgICAgICAgfSBjYXRjaCAoZmluYWwgU2VjdXJpdHlFeGNlcHRpb24gZSkgew0KLSAgICAg ICAgICAgIExPRy5lcnJvcigiWW91IGFyZSBub3QgYWxsb3dlZCB0byBjb3B5IHRoZXNlIGZpbGVz IiwgZSk7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsICJZb3UgYXJlIG5vdCBh bGxvd2VkIHRvIGNvcHkgdGhlc2UgZmlsZXMiLCBlKTsNCiAgICAgICAgICAgICByZXR1cm4gZmFs c2U7DQogICAgICAgICB9DQogICAgIH0NCiANCiAgICAgLyoqDQogICAgICAqIExvYWQgdGhlIGNv bmZpZ3VyYXRpb24gZnJvbSBhIHNwZWNpZmllZCBsb2NhdGlvbi4gPHA+DQotICAgICAqIA0KLSAg ICAgKiBCZWZvcmUgdmVyc2lvbiAwLjI1LjQsIEFyZ29VTUwgdXNlZCB0byBzdG9yZSB0aGUgDQor ICAgICAqDQorICAgICAqIEJlZm9yZSB2ZXJzaW9uIDAuMjUuNCwgQXJnb1VNTCB1c2VkIHRvIHN0 b3JlIHRoZQ0KICAgICAgKiBwcm9wZXJ0aWVzIGZpbGUgaW4gYSBkaWZmZXJlbnQgbG9jYXRpb24u IEEgdXNlciB3aG8NCi0gICAgICogdXBncmFkZXMgaGlzIEFyZ29VTUwgdG8gYSBuZXdlciB2ZXJz aW9uLCANCisgICAgICogdXBncmFkZXMgaGlzIEFyZ29VTUwgdG8gYSBuZXdlciB2ZXJzaW9uLA0K ICAgICAgKiB3b3VsZCBub3QgbGlrZSB0byBsb29zZSBoaXMgc2V0dGluZ3MuDQotICAgICAqIEhl bmNlLCBpbiBjYXNlIGEgcHJvcGVydGllcyBmaWxlIGRvZXMgbm90IGV4aXN0IA0KKyAgICAgKiBI ZW5jZSwgaW4gY2FzZSBhIHByb3BlcnRpZXMgZmlsZSBkb2VzIG5vdCBleGlzdA0KICAgICAgKiAo aW4gdGhlIG5ldyBsb2NhdGlvbiksDQogICAgICAqIHRoaXMgY29kZSBhdHRlbXB0cyB0byBjb3B5 IHRoZSBmaWxlDQogICAgICAqIGZyb20gdGhlIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IGxvY2F0 aW9uLiA8cD4NCi0gICAgICogDQotICAgICAqIEluIHRoaXMgdXBncmFkZSBjYXNlLCB0aGUgcHJv cGVydGllcyBmaWxlIA0KKyAgICAgKg0KKyAgICAgKiBJbiB0aGlzIHVwZ3JhZGUgY2FzZSwgdGhl IHByb3BlcnRpZXMgZmlsZQ0KICAgICAgKiBpcyBjb3BpZWQsIG5vdCBtb3ZlZC4NCiAgICAgICog UmF0aW9uYWxlOiBzZWUgaXNzdWUgNTM2NC4gPHA+DQotICAgICAqIA0KKyAgICAgKg0KICAgICAg KiBUaGUgbWVhbmluZyBvZiB0aGUgcmV0dXJuIHZhbHVlIGlzIG5vdCBzaW1wbHkgc3VjY2Vzcw0K LSAgICAgKiBpbiBsb2FkaW5nIHRoZSBwcm9wZXJ0aWVzIGZpbGUsIA0KLSAgICAgKiBidXQgaXQg aW5kaWNhdGVzIGlmIHdlIG1heSBzYXZlIHRoZSBwcm9wZXJ0aWVzIA0KKyAgICAgKiBpbiBsb2Fk aW5nIHRoZSBwcm9wZXJ0aWVzIGZpbGUsDQorICAgICAqIGJ1dCBpdCBpbmRpY2F0ZXMgaWYgd2Ug bWF5IHNhdmUgdGhlIHByb3BlcnRpZXMNCiAgICAgICogb24gdG9wIG9mIHRoaXMgZmlsZSBsYXRl ci4NCi0gICAgICogSGVuY2UsIGluIGNhc2UgYSBwcm9wZXJ0aWVzIGZpbGUgZGlkIG5vdCBleGlz dCANCi0gICAgICogKG5vdCBpbiB0aGUgbmV3IGxvY2F0aW9uLCBub3IgaW4gdGhlIG9sZCBsb2Nh dGlvbiksIA0KLSAgICAgKiB0aGVuIGEgbmV3IGVtcHR5IGZpbGUgaXMgY3JlYXRlZCwgDQorICAg ICAqIEhlbmNlLCBpbiBjYXNlIGEgcHJvcGVydGllcyBmaWxlIGRpZCBub3QgZXhpc3QNCisgICAg ICogKG5vdCBpbiB0aGUgbmV3IGxvY2F0aW9uLCBub3IgaW4gdGhlIG9sZCBsb2NhdGlvbiksDQor ICAgICAqIHRoZW4gYSBuZXcgZW1wdHkgZmlsZSBpcyBjcmVhdGVkLA0KICAgICAgKiBhbmQgaW4g dGhpcyBjYXNlIHRoZSByZXR1cm4gdmFsdWUgaXMgdHJ1ZS4gPHA+DQotICAgICAqIA0KKyAgICAg Kg0KICAgICAgKiBSZXR1cm5pbmcgZmFsc2UgaGVyZSB3b3VsZCBtZWFuIHRoYXQgbm8gcHJvcGVy dGllcw0KLSAgICAgKiB3aWxsIGJlIHNhdmVkIGF0IGFsbC4gDQorICAgICAqIHdpbGwgYmUgc2F2 ZWQgYXQgYWxsLg0KICAgICAgKg0KICAgICAgKiBAcGFyYW0gZmlsZSAgdGhlIHBhdGggdG8gbG9h ZCB0aGUgY29uZmlndXJhdGlvbiBmcm9tLg0KICAgICAgKg0KLSAgICAgKiBAcmV0dXJuIHRydWUg aWYgdGhlIGdpdmVuIGZpbGUtbG9jYXRpb24gbWF5IGJlIHVzZWQgDQorICAgICAqIEByZXR1cm4g dHJ1ZSBpZiB0aGUgZ2l2ZW4gZmlsZS1sb2NhdGlvbiBtYXkgYmUgdXNlZA0KICAgICAgKiBmb3Ig d3JpdGluZyB0aGUgcHJvcGVydGllcyBsYXRlci4NCiAgICAgICovDQogICAgIHB1YmxpYyBib29s ZWFuIGxvYWRGaWxlKEZpbGUgZmlsZSkgew0KICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICBp ZiAoIWZpbGUuZXhpc3RzKCkpIHsNCi0gICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHRoZSBv bGRlciBwcm9wZXJ0aWVzIGZpbGUgYW5kIA0KKyAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3Ig dGhlIG9sZGVyIHByb3BlcnRpZXMgZmlsZSBhbmQNCiAgICAgICAgICAgICAgICAgLy8gY29weSBp dCBvdmVyIGlmIHBvc3NpYmxlDQogDQotICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZG9uZSBm b3IgY29tcGF0aWJpbGl0eSB3aXRoIHByZXZpb3VzIHZlcnNpb246IA0KKyAgICAgICAgICAgICAg ICAvLyBUaGlzIGlzIGRvbmUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyB2ZXJzaW9u Og0KICAgICAgICAgICAgICAgICAvLyBNb3ZlIHRoZSBhcmdvLnVzZXIucHJvcGVydGllcw0KICAg ICAgICAgICAgICAgICAvLyB3cml0dGVuIGJlZm9yZSAwLjI1LjQgdG8gdGhlIG5ldyBsb2NhdGlv biwgaWYgaXQgZXhpc3RzLg0KICAgICAgICAgICAgICAgICBmaW5hbCBGaWxlIG9sZEZpbGUgPSBu ZXcgRmlsZShnZXRPbGREZWZhdWx0UGF0aCgpKTsNCi0gICAgICAgICAgICAgICAgaWYgKG9sZEZp bGUuZXhpc3RzKCkgJiYgb2xkRmlsZS5pc0ZpbGUoKSAmJiBvbGRGaWxlLmNhblJlYWQoKSANCisg ICAgICAgICAgICAgICAgaWYgKG9sZEZpbGUuZXhpc3RzKCkgJiYgb2xkRmlsZS5pc0ZpbGUoKSAm JiBvbGRGaWxlLmNhblJlYWQoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICYmIGZpbGUuZ2V0 UGFyZW50RmlsZSgpLmNhbldyaXRlKCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIC8vIGNvcHkg dG8gbmV3IGZpbGUgYW5kIGxldCB0aGUgcmVndWxhciBsb2FkIGNvZGUgDQorICAgICAgICAgICAg ICAgICAgICAvLyBjb3B5IHRvIG5ldyBmaWxlIGFuZCBsZXQgdGhlIHJlZ3VsYXIgbG9hZCBjb2Rl DQogICAgICAgICAgICAgICAgICAgICAvLyBkbyB0aGUgYWN0dWFsIGxvYWQNCiAgICAgICAgICAg ICAgICAgICAgIGZpbmFsIGJvb2xlYW4gcmVzdWx0ID0gY29weUZpbGUob2xkRmlsZSwgZmlsZSk7 DQogICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7DQotICAgICAgICAgICAgICAgICAg ICAgICAgTE9HLmluZm8oIkNvbmZpZ3VyYXRpb24gY29waWVkIGZyb20gIiANCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICsgb2xkRmlsZSArICIgdG8gIiArIGZpbGUpOw0KKyAgICAg ICAgICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJDb25maWd1cmF0aW9uIGNvcGllZCBmcm9tIHswfSB0byB7MX0iLA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtde29sZEZpbGUsIGZp bGV9KTsNCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAg ICAgICAgTE9HLmVycm9yKCJFcnJvciBjb3B5aW5nIG9sZCBjb25maWd1cmF0aW9uIHRvIG5ldywg Ig0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAic2VlIHByZXZpb3VzIGxvZyBtZXNz YWdlcyIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGNvcHlpbmcgb2xkIGNvbmZp Z3VyYXRpb24gdG8gbmV3LCAiDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJz ZWUgcHJldmlvdXMgbG9nIG1lc3NhZ2VzIik7DQogICAgICAgICAgICAgICAgICAgICB9DQogICAg ICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAg ICAgICAgICAgICAgICAgICAgIGZpbGUuY3JlYXRlTmV3RmlsZSgpOw0KICAgICAgICAgICAgICAg ICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAg IExPRy5lcnJvcigiQ291bGQgbm90IGNyZWF0ZSB0aGUgcHJvcGVydGllcyBmaWxlIGF0OiAiIA0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBmaWxlLmdldEFic29sdXRlUGF0aCgp LCBlKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgY3JlYXRlIHRoZSBwcm9w ZXJ0aWVzIGZpbGUgYXQ6ICINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZmls ZS5nZXRBYnNvbHV0ZVBhdGgoKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUp Ow0KICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg ICAgfQ0KQEAgLTIxNCwxOCArMjIwLDIxIEBADQogICAgICAgICAgICAgaWYgKGZpbGUuZXhpc3Rz KCkgJiYgZmlsZS5pc0ZpbGUoKSAmJiBmaWxlLmNhblJlYWQoKSkgew0KICAgICAgICAgICAgICAg ICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCdW5kbGUubG9hZChuZXcgRmls ZUlucHV0U3RyZWFtKGZpbGUpKTsNCi0gICAgICAgICAgICAgICAgICAgIExPRy5pbmZvKCJDb25m aWd1cmF0aW9uIGxvYWRlZCBmcm9tICIgKyBmaWxlKTsNCisgICAgICAgICAgICAgICAgICAgIExP Ry5sb2coTGV2ZWwuSU5GTywgIkNvbmZpZ3VyYXRpb24gbG9hZGVkIGZyb20gezB9IiwgZmlsZSk7 DQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgfSBj YXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgew0KICAgICAgICAgICAgICAgICAgICAgaWYgKGNh bkNvbXBsYWluKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgTE9HLndhcm4oIlVuYWJsZSB0 byBsb2FkIGNvbmZpZ3VyYXRpb24gIiArIGZpbGUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAg IExPRy5sb2coTGV2ZWwuV0FSTklORywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJVbmFibGUgdG8gbG9hZCBjb25maWd1cmF0aW9uIHswfSIsIGZpbGUpOw0KICAgICAgICAgICAg ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgY2FuQ29tcGxhaW4gPSBmYWxzZTsNCiAg ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0gY2F0Y2ggKGZpbmFs IFNlY3VyaXR5RXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICBMT0cuZXJyb3IoIkEgc2VjdXJp dHkgZXhjZXB0aW9uIG9jY3VycmVkIHRyeWluZyB0byBsb2FkIg0KLSAgICAgICAgICAgICAgICAr ICIgdGhlIGNvbmZpZ3VyYXRpb24sIGNoZWNrIHlvdXIgc2VjdXJpdHkgc2V0dGluZ3MiLCBlKTsN CisgICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwNCisgICAgICAgICAgICAgICAgICAg ICJBIHNlY3VyaXR5IGV4Y2VwdGlvbiBvY2N1cnJlZCB0cnlpbmcgdG8gbG9hZCINCisgICAgICAg ICAgICAgICAgICAgICsgIiB0aGUgY29uZmlndXJhdGlvbiwgY2hlY2sgeW91ciBzZWN1cml0eSBz ZXR0aW5ncyIsDQorICAgICAgICAgICAgICAgICAgICBlKTsNCiAgICAgICAgIH0NCiAgICAgICAg IHJldHVybiBmYWxzZTsNCiAgICAgfQ0KQEAgLTI0MSwxMSArMjUwLDEyIEBADQogICAgICAgICB0 cnkgew0KICAgICAgICAgICAgIHByb3BlcnR5QnVuZGxlLnN0b3JlKG5ldyBGaWxlT3V0cHV0U3Ry ZWFtKGZpbGUpLA0KICAgICAgICAgICAgICAgICAgICAgIkFyZ29VTUwgcHJvcGVydGllcyIpOw0K LSAgICAgICAgICAgIExPRy5pbmZvKCJDb25maWd1cmF0aW9uIHNhdmVkIHRvICIgKyBmaWxlKTsN CisgICAgICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJDb25maWd1cmF0aW9uIHNhdmVkIHRv IHswfSIsIGZpbGUpOw0KICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgfSBjYXRj aCAoRXhjZXB0aW9uIGUpIHsNCiAgICAgICAgICAgICBpZiAoY2FuQ29tcGxhaW4pIHsNCi0gICAg ICAgICAgICAgICAgTE9HLndhcm4oIlVuYWJsZSB0byBzYXZlIGNvbmZpZ3VyYXRpb24gIiArIGZp bGUgKyAiXG4iKTsNCisgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5XQVJOSU5HLA0KKyAg ICAgICAgICAgICAgICAgICAgICAgICJVbmFibGUgdG8gc2F2ZSBjb25maWd1cmF0aW9uIHswfSIs IGZpbGUpOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBjYW5Db21wbGFpbiA9IGZhbHNl Ow0KICAgICAgICAgfQ0KQEAgLTI2MywxMSArMjczLDExIEBADQogICAgIHB1YmxpYyBib29sZWFu IGxvYWRVUkwoVVJMIHVybCkgew0KICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICBwcm9wZXJ0 eUJ1bmRsZS5sb2FkKHVybC5vcGVuU3RyZWFtKCkpOw0KLSAgICAgICAgICAgIExPRy5pbmZvKCJD b25maWd1cmF0aW9uIGxvYWRlZCBmcm9tICIgKyB1cmwgKyAiXG4iKTsNCisgICAgICAgICAgICBM T0cubG9nKExldmVsLklORk8sICJDb25maWd1cmF0aW9uIGxvYWRlZCBmcm9tIHswfSIsIHVybCk7 DQogICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24g ZSkgew0KICAgICAgICAgICAgIGlmIChjYW5Db21wbGFpbikgew0KLSAgICAgICAgICAgICAgICBM T0cud2FybigiVW5hYmxlIHRvIGxvYWQgY29uZmlndXJhdGlvbiAiICsgdXJsICsgIlxuIik7DQor ICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuV0FSTklORywgIlVuYWJsZSB0byBsb2FkIGNv bmZpZ3VyYXRpb24gezB9IiwgdXJsKTsNCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgY2Fu Q29tcGxhaW4gPSBmYWxzZTsNCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQpAQCAtMjgyLDcg KzI5Miw3IEBADQogICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc2F2ZSB3YXMgc3VjY2Vzc2Z1 bCwgZmFsc2UgaWYgbm90Lg0KICAgICAgKi8NCiAgICAgcHVibGljIGJvb2xlYW4gc2F2ZVVSTChV UkwgdXJsKSB7DQotICAgICAgICAvLyBMT0cuaW5mbygiQ29uZmlndXJhdGlvbiBzYXZlZCB0byAi ICsgdXJsICsgIlxuIik7DQorICAgICAgICAvLyBMT0cubG9nKExldmVsLklORk8sICJDb25maWd1 cmF0aW9uIHNhdmVkIHRvIHswfVxuIiwgdXJsKTsNCiAgICAgICAgIHJldHVybiBmYWxzZTsNCiAg ICAgfQ0KIA0KQEAgLTMxMSw3ICszMjEsNyBAQA0KICAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZh bHVlIHRvIHNldCB0aGUga2V5IHRvLg0KICAgICAgKi8NCiAgICAgcHVibGljIHZvaWQgc2V0VmFs dWUoU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlKSB7DQotICAgICAgICBMT0cuZGVidWcoImtleSAn IiArIGtleSArICInIHNldCB0byAnIiArIHZhbHVlICsgIiciKTsNCisgICAgICAgIExPRy5sb2co TGV2ZWwuRklORSwgImtleSB7MH0gc2V0IHRvIHsxfSIsIG5ldyBPYmplY3RbXXtrZXksIHZhbHVl fSk7DQogICAgICAgICBwcm9wZXJ0eUJ1bmRsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTsNCiAg ICAgfQ0KIA0KQEAgLTMyNCw0ICszMzQsMyBAQA0KICAgICAgICAgcHJvcGVydHlCdW5kbGUucmVt b3ZlKGtleSk7DQogICAgIH0NCiB9DQotDQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1h cHAvc3JjL29yZy9hcmdvdW1sL2dlZmV4dC9EZWZlcnJlZEJ1ZmZlcmVkSW1hZ2UuamF2YQ0KVXJs OiBodHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9z cmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2dlZmV4dC9EZWZlcnJlZEJ1ZmZlcmVkSW1h Z2UuamF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3Vt bC9nZWZleHQvRGVmZXJyZWRCdWZmZXJlZEltYWdlLmphdmEJKG9yaWdpbmFsKQ0KKysrIHRydW5r L3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvZ2VmZXh0L0RlZmVycmVkQnVmZmVyZWRJ bWFnZS5qYXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQogLyog JElkJA0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBDb250 cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiBDb250cmli dXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0g YW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQogICogd2hp Y2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCkBA IC01MCwyOCArNTAsMjkgQEANCiBpbXBvcnQgamF2YS5hd3QuaW1hZ2UuU2FtcGxlTW9kZWw7DQog aW1wb3J0IGphdmEuYXd0LmltYWdlLldyaXRhYmxlUmFzdGVyOw0KIGltcG9ydCBqYXZhLnV0aWwu VmVjdG9yOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51 dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KIA0KLWltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsN CiBpbXBvcnQgb3JnLnRpZ3Jpcy5nZWYuYmFzZS5FZGl0b3I7DQogDQogLyoqDQotICogUmVuZGVy ZWQgR0VGIGltYWdlIHdoaWNoIHVzZXMgYSBiYW5kIGJ1ZmZlciB0byBtaW5pbWl6ZSBtZW1vcnkg dXNhZ2UgZm9yIA0KKyAqIFJlbmRlcmVkIEdFRiBpbWFnZSB3aGljaCB1c2VzIGEgYmFuZCBidWZm ZXIgdG8gbWluaW1pemUgbWVtb3J5IHVzYWdlIGZvcg0KICAqIGhpZ2ggcmVzb2x1dGlvbiBpbWFn ZXMuICBJbWFnZSBpcyByZW5kZXJlZCBvbiBkZW1hbmQgaW4gbXVsdGlwbGUgcGFzc2VzDQogICog YXMgZ2V0RGF0YSBpcyBjYWxsZWQuDQogICogPHA+DQogICogTk9URTogT25seSB0aGUgbWV0aG9k cyB3aGljaCBhcmUgY2FsbGVkIGJ5IEltYWdlSU8ud3JpdGUgaGF2ZSBiZWVuIHRlc3RlZA0KLSAq IGFuZCBwcm92ZW4gdG8gd29yayAoZ2V0TWluWC9ZLCBnZXRXaWR0aCwgZ2V0SGVpZ2h0LCAmIGdl dERhdGEpLiAgVGhpcyBpcyANCisgKiBhbmQgcHJvdmVuIHRvIHdvcmsgKGdldE1pblgvWSwgZ2V0 V2lkdGgsIGdldEhlaWdodCwgJiBnZXREYXRhKS4gIFRoaXMgaXMNCiAgKiA8ZW0+bm90PC9lbT4g YSBnZW5lcmFsIHB1cnBvc2UgUmVuZGVyZWRJbWFnZSBpbXBsZW1lbnRhdGlvbiwgc28geW91IGFy ZSBvbg0KICAqIHlvdXIgb3duIHdpdGggYW55IG90aGVycy4NCi0gKiANCisgKg0KICAqIEBhdXRo b3IgVG9tIE1vcnJpcyA8dGZtb3JyaXNAZ21haWwuY29tPg0KICAqIEBzaW5jZSBBcmdvVU1MIDAu MjYNCiAgKi8NCiBwdWJsaWMgY2xhc3MgRGVmZXJyZWRCdWZmZXJlZEltYWdlIGltcGxlbWVudHMg UmVuZGVyZWRJbWFnZSB7DQotICAgIA0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIg TE9HID0gDQotICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKERlZmVycmVkQnVmZmVyZWRJbWFnZS5j bGFzcyk7DQotICAgIA0KKw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0N CisgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoRGVmZXJyZWRCdWZmZXJlZEltYWdlLmNsYXNzLmdl dE5hbWUoKSk7DQorDQogICAgIC8qKg0KICAgICAgKiBSR0IgdmFsdWVzIGZvciBiYWNrZ3JvdW5k IGNvbG9yIGZvciBpbWFnZS4gU2V0IGFzIHRyYW5zcGFyZW50LiBDaG9zZW4NCiAgICAgICogYmVj YXVzZSBpdCdzIHVubGlrZWx5IHRvIGJlIHNlbGVjdGVkIGJ5IHRoZSB1c2VyLCBhbmQgbGVhdmVz IHRoZSBkaWFncmFtDQpAQCAtNzksMjggKzgwLDI4IEBADQogICAgICAqLw0KICAgICBwdWJsaWMg c3RhdGljIGZpbmFsIGludCBUUkFOU1BBUkVOVF9CR19DT0xPUiA9IDB4MDBlZmVmZWY7DQogDQot ICAgIC8qKiANCisgICAgLyoqDQogICAgICAqIEJhY2tncm91bmQgY29sb3INCiAgICAgICovDQog ICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ29sb3IgQkFDS0dST1VORF9DT0xPUiA9DQogICAgICAg ICAgICAgbmV3IENvbG9yKFRSQU5TUEFSRU5UX0JHX0NPTE9SLCB0cnVlKTsNCi0gICAgDQorDQog ICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCVUZGRVJfSEVJR0hUID0gMzI7DQotIA0KKw0K ICAgICBwcml2YXRlIGludCB4LCB5Ow0KICAgICBwcml2YXRlIGludCB3aWR0aDsNCiAgICAgcHJp dmF0ZSBpbnQgaGVpZ2h0Ow0KICAgICBwcml2YXRlIGludCBzY2FsZTsNCiAgICAgcHJpdmF0ZSBC dWZmZXJlZEltYWdlIGltYWdlOw0KICAgICBwcml2YXRlIEVkaXRvciBlZGl0b3I7DQotICAgIA0K Kw0KICAgICBwcml2YXRlIGludCBzY2FsZWRCdWZmZXJIZWlnaHQ7DQogICAgIHByaXZhdGUgaW50 IHkxLCB5MjsNCi0gICAgDQorDQogICAgIC8qKg0KICAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgRGVm ZXJyZWRCdWZmZXJlZEltYWdlIHdoaWNoIHdpbGwgdXNlIEdFRiB0byByZW5kZXIgdGhlDQogICAg ICAqIGN1cnJlbnQgZGlhZ3JhbSBvbiBkZW1hbmQuDQotICAgICAqIA0KKyAgICAgKg0KICAgICAg KiBAcGFyYW0gZHJhd2luZ0FyZWEgYm91bmRpbmcgcmVjdGFuZ2xlIG9mIHRoZSBhcmVhIHRvIGJl IGRyYXduDQogICAgICAqIEBwYXJhbSBpbWFnZVR5cGUgVHlwZSBvZiBpbWFnZSB0byBiZSBjcmVh dGVkIChlLmcuIFRZUEVfSU5UX0FSR0IpLiBNdXN0DQogICAgICAqICAgICAgICAgICAgICAgIGJl IG9uIGFuIGltYWdlIHR5cGUgd2hpY2ggaXMgc3VwcG9ydGVkIGJ5IEJ1ZmZlcmVkSW1hZ2UNCkBA IC0xMTAsNyArMTExLDcgQEANCiAgICAgICovDQogICAgIHB1YmxpYyBEZWZlcnJlZEJ1ZmZlcmVk SW1hZ2UoUmVjdGFuZ2xlIGRyYXdpbmdBcmVhLCBpbnQgaW1hZ2VUeXBlLA0KICAgICAgICAgICAg IEVkaXRvciBlZCwgaW50IHNjYWxlRmFjdG9yKSB7DQotICAgICAgICANCisNCiAgICAgICAgIGVk aXRvciA9IGVkOw0KICAgICAgICAgc2NhbGUgPSBzY2FsZUZhY3RvcjsNCiANCkBAIC0xMjUsNyAr MTI2LDcgQEANCiAgICAgICAgIHdpZHRoID0gd2lkdGggICogc2NhbGU7DQogICAgICAgICBoZWln aHQgPSBoZWlnaHQgICogc2NhbGU7DQogICAgICAgICBzY2FsZWRCdWZmZXJIZWlnaHQgPSBCVUZG RVJfSEVJR0hUICogc2NhbGU7DQotICAgICAgICANCisNCiAgICAgICAgIC8vIENyZWF0ZSBvdXIg YmFuZGJ1ZmZlciB3aGljaCBpcyBqdXN0IGEgc21hbGwgc2xpY2Ugb2YgdGhlIGltYWdlDQogICAg ICAgICAvLyBUT0RPOiBXZSB1c2VkIGEgZml4ZWQgaGVpZ2h0IGJ1ZmZlciBub3csIGJ1dCB3ZSBj b3VsZCBiZSBzbWFydGVyIGFuZA0KICAgICAgICAgLy8gY29tcHV0ZSBhIGhlaWdodCB3aGljaCB3 b3VsZCBmaXQgaW4gc29tZSBtZW1vcnkgYnVkZ2V0LCBhbGxvd2luZyB1cw0KQEAgLTEzNywyMyAr MTM4LDIzIEBADQogICAgICAgICB5MSA9IHk7DQogICAgICAgICB5MiA9IHkxOw0KICAgICB9DQot ICAgIA0KKw0KIA0KICAgICBwdWJsaWMgUmFzdGVyIGdldERhdGEoKSB7DQotICAgICAgICBMT0cu ZGVidWcoImdldERhdGEgd2l0aCBubyBwYXJhbXMiKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwu RklORSwgImdldERhdGEgd2l0aCBubyBwYXJhbXMiKTsNCiAgICAgICAgIHJldHVybiBnZXREYXRh KG5ldyBSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCkpOw0KICAgICB9DQotICAgIA0KKw0K ICAgICBwdWJsaWMgUmFzdGVyIGdldERhdGEoUmVjdGFuZ2xlIGNsaXApIHsNCi0vLyAgICAgICAg TE9HLmRlYnVnKCJnZXREYXRhIFJlY3RhbmdsZSA9ICIgKyBjbGlwKTsNCisvLyAgICAgICAgTE9H LmxvZyhMZXZlbC5GSU5FLCAiZ2V0RGF0YSBSZWN0YW5nbGUgPSAiICsgY2xpcCk7DQogICAgICAg ICBpZiAoIWlzUmFzdGVyVmFsaWQoY2xpcCkpIHsNCi0gICAgICAgICAgICBMT0cuZGVidWcoIlJh c3RlciBub3QgdmFsaWQsIGNvbXB1dGluZyBuZXcgcmFzdGVyIik7DQorICAgICAgICAgICAgTE9H LmxvZyhMZXZlbC5GSU5FLCAiUmFzdGVyIG5vdCB2YWxpZCwgY29tcHV0aW5nIG5ldyByYXN0ZXIi KTsNCiAgICAgICAgICAgICBjb21wdXRlUmFzdGVyKGNsaXApOw0KICAgICAgICAgfQ0KICAgICAg ICAgUmVjdGFuZ2xlIG9DbGlwID0gb2Zmc2V0V2luZG93KGNsaXApOw0KICAgICAgICAgUmFzdGVy IHJhcyA9IGltYWdlLmdldERhdGEob0NsaXApOw0KICAgICAgICAgUmFzdGVyIHRyYW5zbGF0ZWRS YXN0ZXIgPSByYXMuY3JlYXRlVHJhbnNsYXRlZENoaWxkKGNsaXAueCwgY2xpcC55KTsNCi0vLyAg ICAgICAgTE9HLmRlYnVnKCJnZXREYXRhIHJldHVybmluZyByYXN0ZXIgPSAiICsgdHJhbnNsYXRl ZFJhc3Rlcik7DQorLy8gICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgImdldERhdGEgcmV0dXJu aW5nIHJhc3RlciA9ICIgKyB0cmFuc2xhdGVkUmFzdGVyKTsNCiAgICAgICAgIHJldHVybiB0cmFu c2xhdGVkUmFzdGVyOw0KICAgICB9DQogDQpAQCAtMTczLDEyICsxNzQsMTIgQEANCiAgICAgICog UmFzdGVyaXplIHRoZSBuZXh0IHNsaWNlIGluIHRoZSBiYW5kIGJ1ZmZlci4gUmFzdGVyIHdpbGwg YmUgdGhlIGZ1bGwNCiAgICAgICogd2lkdGggb2YgdGhlIGltYWdlIGFuZCBiYXNlZCB2ZXJ0aWNh bGx5IGF0IHRoZSBZIHZhbHVlIG9mIHRoZSBjdXJyZW50DQogICAgICAqIGNsaXAgcmVjdGFuZ2xl Lg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIGNsaXAgY2xpcCByZWN0YW5nbGUg b2YgaW50ZXJlc3QNCiAgICAgICovDQogICAgIHByaXZhdGUgdm9pZCBjb21wdXRlUmFzdGVyKFJl Y3RhbmdsZSBjbGlwKSB7DQotICAgICAgICBMT0cuZGVidWcoIkNvbXB1dGluZyByYXN0ZXIgZm9y IHJlY3RhbmdsZSAiICsgY2xpcCk7DQotICAgICAgICANCisgICAgICAgIExPRy5sb2coTGV2ZWwu RklORSwgIkNvbXB1dGluZyByYXN0ZXIgZm9yIHJlY3RhbmdsZSB7MH0iLCBjbGlwKTsNCisNCiAg ICAgICAgIC8vIENyZWF0ZSBhIG5ldyBncmFwaGljcyBjb250ZXh0IHNvIHdlIHN0YXJ0IHdpdGgg ZnJlc2ggdHJhbnNmb3Jtcw0KICAgICAgICAgR3JhcGhpY3MyRCBncmFwaGljcyA9IGltYWdlLmNy ZWF0ZUdyYXBoaWNzKCk7DQogICAgICAgICBncmFwaGljcy5zY2FsZSgxLjAgKiBzY2FsZSwgMS4w ICogc2NhbGUpOw0KQEAgLTE5OCw3ICsxOTksNyBAQA0KIA0KICAgICAgICAgLy8gQXNrIEdFRiB0 byBwcmludCBhIGJhbmQgb2YgdGhlIGRpYWdyYW0gKHRyYW5zbGF0ZWQgJiBjbGlwcGVkKQ0KICAg ICAgICAgZWRpdG9yLnByaW50KGdyYXBoaWNzKTsNCi0gICAgICAgIA0KKw0KICAgICAgICAgLy8g TWFrZSBzdXJlIGl0IGlzbid0IGNhY2hpbmcgYW55dGhpbmcgdGhhdCBzaG91bGQgYmUgd3JpdHRl bg0KICAgICAgICAgZ3JhcGhpY3MuZGlzcG9zZSgpOw0KICAgICB9DQpAQCAtMjA2LDIwICsyMDcs MjAgQEANCiAgICAgLyoqDQogICAgICAqIFJldHVybiBhIG5ldyBjbGlwIHJlY3RhbmdsZSB3aGlj aCBpcyBvZmZzZXQgYnkgdGhlIGJhc2Ugb2Ygb3VyIGJhbmQNCiAgICAgICogYnVmZmVyLg0KLSAg ICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIGNsaXAgY2xpcHBpbmcgcmVjdGFuZ2xlDQog ICAgICAqIEByZXR1cm4gYWRqdXN0ZWQgY2xpcHBpbmcgcmVjdGFuZ2xlDQogICAgICAqLw0KICAg ICBwcml2YXRlIFJlY3RhbmdsZSBvZmZzZXRXaW5kb3coUmVjdGFuZ2xlIGNsaXApIHsNCiAgICAg ICAgIGludCBiYXNlWSA9IGNsaXAueSAtIHkxOw0KLSAgICAgICAgcmV0dXJuIG5ldyBSZWN0YW5n bGUoY2xpcC54LCBiYXNlWSwgY2xpcC53aWR0aCwgDQorICAgICAgICByZXR1cm4gbmV3IFJlY3Rh bmdsZShjbGlwLngsIGJhc2VZLCBjbGlwLndpZHRoLA0KICAgICAgICAgICAgICAgICBNYXRoLm1p bihjbGlwLmhlaWdodCwgc2NhbGVkQnVmZmVySGVpZ2h0IC0gYmFzZVkpKTsNCiAgICAgfQ0KIA0K IA0KICAgICAvKioNCiAgICAgICogTm90IGltcGxlbWVudGVkDQotICAgICAqIA0KKyAgICAgKg0K ICAgICAgKiB7QGluaGVyaXREb2N9DQogICAgICAqIEBzZWUgamF2YS5hd3QuaW1hZ2UuUmVuZGVy ZWRJbWFnZSNjb3B5RGF0YShqYXZhLmF3dC5pbWFnZS5Xcml0YWJsZVJhc3RlcikNCiAgICAgICov DQpAQCAtMjMyLDcgKzIzMyw3IEBADQogICAgIC8qKg0KICAgICAgKiBOb3QgaW1wbGVtZW50ZWQu DQogICAgICAqIHtAaW5oZXJpdERvY30NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBzZWUg amF2YS5hd3QuaW1hZ2UuUmVuZGVyZWRJbWFnZSNnZXRTb3VyY2VzKCkNCiAgICAgICovDQogICAg IHB1YmxpYyBWZWN0b3I8UmVuZGVyZWRJbWFnZT4gZ2V0U291cmNlcygpIHsNCkBAIC0yNDQsMzkg KzI0NSwzOSBAQA0KICAgICB9DQogDQogICAgIHB1YmxpYyBpbnQgZ2V0TWluWCgpIHsNCi0gICAg ICAgIExPRy5kZWJ1ZygiZ2V0TWluWCA9IDAiKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuRklO RSwgImdldE1pblggPSAwIik7DQogICAgICAgICByZXR1cm4gMDsNCiAgICAgfQ0KIA0KICAgICBw dWJsaWMgaW50IGdldE1pblkoKSB7DQotICAgICAgICBMT0cuZGVidWcoImdldE1pblkgPSAwIik7 DQorICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJnZXRNaW5ZID0gMCIpOw0KICAgICAgICAg cmV0dXJuIDA7DQogICAgIH0NCiANCiAgICAgcHVibGljIGludCBnZXRNaW5UaWxlWCgpIHsNCi0g ICAgICAgIExPRy5kZWJ1ZygiZ2V0TWluVGlsZVggPSAwIik7DQorICAgICAgICBMT0cubG9nKExl dmVsLkZJTkUsICJnZXRNaW5UaWxlWCA9IDAiKTsNCiAgICAgICAgIHJldHVybiAwOw0KICAgICB9 DQogDQogICAgIHB1YmxpYyBpbnQgZ2V0TWluVGlsZVkoKSB7DQotICAgICAgICBMT0cuZGVidWco ImdldE1pblRpbGVZID0gMCIpOw0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiZ2V0TWlu VGlsZVkgPSAwIik7DQogICAgICAgICByZXR1cm4gMDsNCiAgICAgfQ0KLSAgICANCisNCiAgICAg cHVibGljIGludCBnZXROdW1YVGlsZXMoKSB7DQotICAgICAgICBMT0cuZGVidWcoImdldE51bVhU aWxlcyA9IDEiKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgImdldE51bVhUaWxlcyA9 IDEiKTsNCiAgICAgICAgIHJldHVybiAxOw0KICAgICB9DQotICAgIA0KKw0KICAgICAvKioNCi0g ICAgICogVW50ZXN0ZWQuIE5vdCBndWFyYW50ZWVkIHRvIHdvcmsuIA0KKyAgICAgKiBVbnRlc3Rl ZC4gTm90IGd1YXJhbnRlZWQgdG8gd29yay4NCiAgICAgICoge0Bpbmhlcml0RG9jfQ0KLSAgICAg KiANCisgICAgICoNCiAgICAgICogQHNlZSBqYXZhLmF3dC5pbWFnZS5SZW5kZXJlZEltYWdlI2dl dE51bVlUaWxlcygpDQogICAgICAqLw0KICAgICBwdWJsaWMgaW50IGdldE51bVlUaWxlcygpIHsN CiAgICAgICAgIGludCB0aWxlcyA9IChnZXRIZWlnaHQoKSArIHNjYWxlZEJ1ZmZlckhlaWdodCAt IDEpIC8gc2NhbGVkQnVmZmVySGVpZ2h0Ow0KLSAgICAgICAgTE9HLmRlYnVnKCJnZXROdW1ZVGls ZXMgPSAiICsgdGlsZXMpOw0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiZ2V0TnVtWVRp bGVzID0gezB9IiwgdGlsZXMpOw0KICAgICAgICAgcmV0dXJuIHRpbGVzOw0KICAgICB9DQogDQpA QCAtMjk0LDE3ICsyOTUsMTcgQEANCiANCiANCiAgICAgLyoqDQotICAgICAqIFVudGVzdGVkLiBO b3QgZ3VhcmFudGVlZCB0byB3b3JrLiANCisgICAgICogVW50ZXN0ZWQuIE5vdCBndWFyYW50ZWVk IHRvIHdvcmsuDQogICAgICAqIHtAaW5oZXJpdERvY30NCi0gICAgICogDQorICAgICAqDQogICAg ICAqIEBzZWUgamF2YS5hd3QuaW1hZ2UuUmVuZGVyZWRJbWFnZSNnZXROdW1ZVGlsZXMoKQ0KICAg ICAgKi8NCiANCiAgICAgcHVibGljIFJhc3RlciBnZXRUaWxlKGludCB0aWxlWCwgaW50IHRpbGVZ KSB7DQotICAgICAgICBMT0cuZGVidWcoImdldFRpbGUgeD0iICsgdGlsZVggKyAiIHkgPSAiICsg dGlsZVkpOw0KLSAgICAgICAgaWYgKHRpbGVYIDwgZ2V0TWluVGlsZVgoKSANCisgICAgICAgIExP Ry5sb2coTGV2ZWwuRklORSwgImdldFRpbGUgeD17MH0sIHkgPSB7MX0iLCBuZXcgT2JqZWN0W117 dGlsZVgsIHRpbGVZfSk7DQorICAgICAgICBpZiAodGlsZVggPCBnZXRNaW5UaWxlWCgpDQogICAg ICAgICAgICAgICAgIHx8IHRpbGVYID49IGdldE1pblRpbGVYKCkgKyBnZXROdW1YVGlsZXMoKQ0K LSAgICAgICAgICAgICAgICB8fCB0aWxlWSA8IGdldE1pblRpbGVZKCkgDQorICAgICAgICAgICAg ICAgIHx8IHRpbGVZIDwgZ2V0TWluVGlsZVkoKQ0KICAgICAgICAgICAgICAgICB8fCB0aWxlWSA+ PSBnZXRNaW5UaWxlWSgpICsgZ2V0TnVtWVRpbGVzKCkpIHsNCiAgICAgICAgICAgICB0aHJvdyBu ZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigpOw0KICAgICAgICAgfQ0KQEAgLTMxNiwzMiAr MzE3LDMyIEBADQogICAgIH0NCiANCiAgICAgcHVibGljIGludCBnZXRUaWxlR3JpZFhPZmZzZXQo KSB7DQotICAgICAgICBMT0cuZGVidWcoImdldFRpbGVHcmlkWE9mZnNldCA9IDAiKTsNCisgICAg ICAgIExPRy5sb2coTGV2ZWwuRklORSwgImdldFRpbGVHcmlkWE9mZnNldCA9IDAiKTsNCiAgICAg ICAgIHJldHVybiAwOw0KICAgICB9DQogDQogICAgIHB1YmxpYyBpbnQgZ2V0VGlsZUdyaWRZT2Zm c2V0KCkgew0KLSAgICAgICAgTE9HLmRlYnVnKCJnZXRUaWxlR3JpZFlPZmZzZXQgPSAwIik7DQor ICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJnZXRUaWxlR3JpZFlPZmZzZXQgPSAwIik7DQog ICAgICAgICByZXR1cm4gMDsNCiAgICAgfQ0KIA0KICAgICBwdWJsaWMgaW50IGdldFRpbGVXaWR0 aCgpIHsNCi0gICAgICAgIExPRy5kZWJ1ZygiZ2V0VGlsZVdpZHRoID0gIiArIHdpZHRoKTsNCisg ICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgImdldFRpbGVXaWR0aCA9IHswfSIsIHdpZHRoKTsN CiAgICAgICAgIHJldHVybiB3aWR0aDsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgcHVibGljIGlu dCBnZXRUaWxlSGVpZ2h0KCkgew0KLSAgICAgICAgTE9HLmRlYnVnKCJnZXRUaWxlSGVpZ2h0ID0g IiArIHNjYWxlZEJ1ZmZlckhlaWdodCk7DQorICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJn ZXRUaWxlSGVpZ2h0ID0gezB9Iiwgc2NhbGVkQnVmZmVySGVpZ2h0KTsNCiAgICAgICAgIHJldHVy biBzY2FsZWRCdWZmZXJIZWlnaHQ7DQogICAgIH0NCiANCiAgICAgcHVibGljIGludCBnZXRXaWR0 aCgpIHsNCi0gICAgICAgIExPRy5kZWJ1ZygiZ2V0V2lkdGggPSAiICsgd2lkdGgpOw0KKyAgICAg ICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiZ2V0V2lkdGggPSB7MH0iLCB3aWR0aCk7DQogICAgICAg ICByZXR1cm4gd2lkdGg7DQogICAgIH0NCi0gICAgDQorDQogICAgIHB1YmxpYyBpbnQgZ2V0SGVp Z2h0KCkgew0KLSAgICAgICAgTE9HLmRlYnVnKCJnZXRIZWlnaHQgPSAiICsgaGVpZ2h0KTsNCisg ICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgImdldEhlaWdodCA9ICIgKyBoZWlnaHQpOw0KICAg ICAgICAgcmV0dXJuIGhlaWdodDsNCiAgICAgfQ0KIH0NCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9h cmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvaTE4bi9UcmFuc2xhdG9yLmphdmENClVybDogaHR0 cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2Fy Z291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9pMThuL1RyYW5zbGF0b3IuamF2YT92aWV3PWRpZmYm cGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot LS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9pMThuL1RyYW5zbGF0b3Iu amF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3Vt bC9pMThuL1RyYW5zbGF0b3IuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYg KzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQg KGMpIDIwMDkgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5 LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4g VGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRl IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ug djEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZh aWxhYmxlIGF0DQpAQCAtNDcsOCArNDcsOSBAQA0KIGltcG9ydCBqYXZhLnV0aWwuTWFwOw0KIGlt cG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOw0KIGltcG9ydCBqYXZhLnV0 aWwuUmVzb3VyY2VCdW5kbGU7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2lt cG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9n NGouTG9nZ2VyOw0KIGltcG9ydCBvcmcudGlncmlzLmdlZi51dGlsLkxvY2FsaXplcjsNCiANCiAv KioNCkBAIC02Miw3ICs2Myw4IEBADQogICAgIC8qKg0KICAgICAgKiBMb2dnZXIuDQogICAgICAq Lw0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyLmdldExvZ2dl cihUcmFuc2xhdG9yLmNsYXNzKTsNCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExP RyA9DQorICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKFRyYW5zbGF0b3IuY2xhc3MuZ2V0TmFtZSgp KTsNCiANCiAgICAgLyoqDQogICAgICAqIFdoZXJlIHdlIHNlYXJjaCBmb3IgYnVuZGxlcy4NCkBA IC03Nyw3ICs3OSw3IEBADQogICAgIC8qKg0KICAgICAgKiBTdG9yZSBvZiBDbGFzc0xvYWRlcnMg d2hlcmUgd2UgY291bGQgZmluZCB0aGUgYnVuZGxlcy4NCiAgICAgICovDQotICAgIHByaXZhdGUg c3RhdGljIExpc3Q8Q2xhc3NMb2FkZXI+IGNsYXNzTG9hZGVycyA9IA0KKyAgICBwcml2YXRlIHN0 YXRpYyBMaXN0PENsYXNzTG9hZGVyPiBjbGFzc0xvYWRlcnMgPQ0KICAgICAgICAgbmV3IEFycmF5 TGlzdDxDbGFzc0xvYWRlcj4oKTsNCiANCiAgICAgLyoqDQpAQCAtODksNyArOTEsNyBAQA0KICAg ICAgKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG9yaWdpbmFsIHN5c3RlbSBkZWZhdWx0IGxv Y2FsZQ0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9jYWxlIHN5c3RlbURlZmF1bHRM b2NhbGU7DQotICAgIA0KKw0KICAgICAvKioNCiAgICAgICogVGhpcyBjbGFzcyBzaG91bGQgb25s eSBiZSB1c2VkIGluIGEgc3RhdGljIGNvbnRleHQgc28gbWFrZQ0KICAgICAgKiB0aGUgY29uc3Ry dWN0b3IgcHJpdmF0ZS4NCkBAIC0xMDIsNyArMTA0LDcgQEANCiAgICAgICogQWx0ZXJuYXRlIGlu aXRpYWxpemF0aW9uIGVudHJ5IHBvaW50IGZvciB1c2UgYnkgQXJnb0VjbGlwc2UuDQogICAgICAq IEl0IGxlYXZlcyBvdXQgdGVsbGluZyBHRUYgYWJvdXQgYnVuZGxlcyB0aGF0IGl0IHdvbid0IGJl IGFibGUNCiAgICAgICogdG8gYWNjZXNzLiA8cD4NCi0gICAgICogDQorICAgICAqDQogICAgICAq IE5PVEU6IFRoaXMgbXVzdCBiZSBjYWxsZWQgKmJlZm9yZSogYW55IG90aGVyIG1ldGhvZHMgYXJl IGNhbGxlZCB0bw0KICAgICAgKiB3b3JrIHByb3Blcmx5Lg0KICAgICAgKg0KQEAgLTExNSw3ICsx MTcsNyBAQA0KIA0KICAgICAvKioNCiAgICAgICogSW5pdGlhbGl6ZSB0aGUgbG9jYWxlLg0KLSAg ICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIGxvY2FsZSBhIHN0cmluZyB3aXRoIHRoZSBs b2NhbGUNCiAgICAgICovDQogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBpbml0KFN0cmluZyBsb2Nh bGUpIHsNCkBAIC0yMDQsNyArMjA2LDcgQEANCiAgICAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUg b2YgdGhlIG5ldyBsb2NhbGUNCiAgICAgICovDQogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRM b2NhbGUoU3RyaW5nIG5hbWUpIHsNCi0gICAgICAgIC8qIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUg SlVuaXQgdGVzdHMuIA0KKyAgICAgICAgLyogVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBKVW5pdCB0 ZXN0cy4NCiAgICAgICAgICAqIE90aGVyd2lzZSBhICJhc3NlcnQgaW5pdGlhbGl6ZWQiIHdvdWxk IHN1ZmZpY2UuICovDQogICAgICAgICBpZiAoIWluaXRpYWxpemVkKSB7DQogICAgICAgICAgICAg aW5pdCgiZW4iKTsNCkBAIC0yMzUsNyArMjM3LDcgQEANCiAgICAgICogUmV0dXJucyB0aGUgb3Jp Z2luYWwgdmFsdWUgb2YgdGhlIGRlZmF1bHQgbG9jYWxlIGZvciB0aGlzIGluc3RhbmNlDQogICAg ICAqIG9mIHRoZSBKYXZhIFZpcnR1YWwgTWFjaGluZSAod2hpY2ggaXMgaW5kZXBlbmRlbnQgZnJv bSB0aGUgc2VsZWN0ZWQNCiAgICAgICogY29uZmlndXJhdGlvbikuDQotICAgICAqIA0KKyAgICAg Kg0KICAgICAgKiBAcmV0dXJuIHRoZSBvcmlnaW5hbCBzeXN0ZW0gZGVmYXVsdCBsb2NhbGUNCiAg ICAgICovDQogICAgIHB1YmxpYyBzdGF0aWMgTG9jYWxlIGdldFN5c3RlbURlZmF1bHRMb2NhbGUo KSB7DQpAQCAtMjY1LDI1ICsyNjcsMjkgQEANCiAgICAgICAgIFN0cmluZyByZXNvdXJjZSA9IEJV TkRMRVNfUEFUSCArICIuIiArIG5hbWU7DQogICAgICAgICBSZXNvdXJjZUJ1bmRsZSBidW5kbGUg PSBudWxsOw0KICAgICAgICAgdHJ5IHsNCi0gICAgICAgICAgICBMT0cuZGVidWcoIkxvYWRpbmcg IiArIHJlc291cmNlKTsNCisgICAgICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJMb2FkaW5n IHswfSIsIHJlc291cmNlKTsNCiAgICAgICAgICAgICBMb2NhbGUgbG9jYWxlID0gTG9jYWxlLmdl dERlZmF1bHQoKTsNCiAgICAgICAgICAgICBidW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5k bGUocmVzb3VyY2UsIGxvY2FsZSk7DQogICAgICAgICB9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VF eGNlcHRpb24gZTEpIHsNCi0gICAgICAgICAgICBMT0cuZGVidWcoIlJlc291cmNlICIgKyByZXNv dXJjZQ0KLQkJICAgICAgKyAiIG5vdCBmb3VuZCBpbiB0aGUgZGVmYXVsdCBjbGFzcyBsb2FkZXIu Iik7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLA0KKyAgICAgICAgICAgICAgICAg ICAgIlJlc291cmNlIHswfSBub3QgZm91bmQgaW4gdGhlIGRlZmF1bHQgY2xhc3MgbG9hZGVyLiIs DQorICAgICAgICAgICAgICAgICAgICByZXNvdXJjZSk7DQogDQogCSAgICBJdGVyYXRvciBpdGVy ID0gY2xhc3NMb2FkZXJzLml0ZXJhdG9yKCk7DQogCSAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkp IHsNCiAJCUNsYXNzTG9hZGVyIGNsID0gKENsYXNzTG9hZGVyKSBpdGVyLm5leHQoKTsNCiAJCXRy eSB7DQotCQkgICAgTE9HLmRlYnVnKCJMb2FkaW5nICIgKyByZXNvdXJjZSArICIgZnJvbSAiICsg Y2wpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwNCisgICAgICAgICAgICAgICAg ICAgICJMb2FkaW5nIHswfSBmcm9tIHsxfSIsDQorICAgICAgICAgICAgICAgICAgICBuZXcgT2Jq ZWN0W117cmVzb3VyY2UsIGNsfSk7DQogCQkgICAgYnVuZGxlID0NCiAJCQlSZXNvdXJjZUJ1bmRs ZS5nZXRCdW5kbGUocmVzb3VyY2UsDQogCQkJCQkJIExvY2FsZS5nZXREZWZhdWx0KCksDQogCQkJ CQkJIGNsKTsNCiAJCSAgICBicmVhazsNCiAJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2Vw dGlvbiBlMikgew0KLQkJICAgIExPRy5kZWJ1ZygiUmVzb3VyY2UgIiArIHJlc291cmNlICsgIiBu b3QgZm91bmQgaW4gIiArIGNsKTsNCisgICAgICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwu RklORSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlc291cmNlICIgKyByZXNvdXJj ZSArICIgbm90IGZvdW5kIGluICIgKyBjbCk7DQogCQl9DQogCSAgICB9DQogICAgICAgICB9DQpA QCAtMzM1LDcgKzM0MSw3IEBADQogICAgICAqIEByZXR1cm4gVGhlIGxvY2FsaXplZCBTdHJpbmcu DQogICAgICAqLw0KICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBsb2NhbGl6ZShTdHJpbmcga2V5 KSB7DQotICAgICAgICAvKiBUaGlzIGlzIG5lZWRlZCBmb3IgdGhlIEpVbml0IHRlc3RzLiANCisg ICAgICAgIC8qIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgSlVuaXQgdGVzdHMuDQogICAgICAgICAg KiBPdGhlcndpc2UgYSAiYXNzZXJ0IGluaXRpYWxpemVkIiB3b3VsZCBzdWZmaWNlLiAqLw0KICAg ICAgICAgaWYgKCFpbml0aWFsaXplZCkgew0KICAgICAgICAgICAgIGluaXQoImVuIik7DQpAQCAt MzU0LDE1ICszNjAsMTYgQEANCiANCiAgICAgICAgIFJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IGJ1 bmRsZXMuZ2V0KG5hbWUpOw0KICAgICAgICAgaWYgKGJ1bmRsZSA9PSBudWxsKSB7DQotICAgICAg ICAgICAgTE9HLmRlYnVnKCJCdW5kbGUgKCIgKyBuYW1lICsgIikgZm9yIHJlc291cmNlICINCi0g ICAgICAgICAgICAgICAgICAgICsga2V5ICsgIiBub3QgZm91bmQuIik7DQorICAgICAgICAgICAg TE9HLmxvZyhMZXZlbC5GSU5FLA0KKyAgICAgICAgICAgICAgICAgICAgIkJ1bmRsZSAoezB9KSBm b3IgcmVzb3VyY2UgezF9IG5vdCBmb3VuZC4iLA0KKyAgICAgICAgICAgICAgICAgICAgbmV3IE9i amVjdFtde25hbWUsIGtleX0pOw0KICAgICAgICAgICAgIHJldHVybiBrZXk7DQogICAgICAgICB9 DQogDQogICAgICAgICB0cnkgew0KICAgICAgICAgICAgIHJldHVybiBidW5kbGUuZ2V0U3RyaW5n KGtleSk7DQogICAgICAgICB9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgew0K LSAgICAgICAgICAgIExPRy5kZWJ1ZygiUmVzb3VyY2UgIiArIGtleSArICIgbm90IGZvdW5kLiIp Ow0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgIlJlc291cmNlIHswfSBub3QgZm91 bmQuIiwga2V5KTsNCiAgICAgICAgICAgICByZXR1cm4ga2V5Ow0KICAgICAgICAgfQ0KICAgICB9 DQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2tlcm5l bC9EZWZhdWx0VW5kb01hbmFnZXIuamF2YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50aWdyaXMub3Jn L3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdv dW1sL2tlcm5lbC9EZWZhdWx0VW5kb01hbmFnZXIuamF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkw NyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3Jj L2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9rZXJuZWwvRGVmYXVsdFVuZG9NYW5hZ2VyLmph dmEJKG9yaWdpbmFsKQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwv a2VybmVsL0RlZmF1bHRVbmRvTWFuYWdlci5qYXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0K QEAgLTEsNiArMSw2IEBADQogLyogJElkJA0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENv cHlyaWdodCAoYykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQg KGMpIDIwMDktMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJl c2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICog YXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMg TGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFu ZCBpcyBhdmFpbGFibGUgYXQNCkBAIC00NSw0OSArNDUsNTAgQEANCiBpbXBvcnQgamF2YS51dGls Lkxpc3Q7DQogaW1wb3J0IGphdmEudXRpbC5MaXN0SXRlcmF0b3I7DQogaW1wb3J0IGphdmEudXRp bC5TdGFjazsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEu dXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7 DQogaW1wb3J0IG9yZy5hcmdvdW1sLmkxOG4uVHJhbnNsYXRvcjsNCiANCiAvKioNCiAgKiBNYW5h Z2VzIGEgc3RhY2tzIG9mIENvbW1hbmRzIHRvIHVuZG8gYW5kIHJlZG8uIFRoaXMgRGVmYXVsdFVu ZG9NYW5hZ2VyIGlzDQogICogb25seSB0ZW1wb3JhcmlseSBhIHNpbmdsZXRvbiB1bnRpbCBjaGFu Z2VzIGFyZSBtYWRlIHRvIEdFRi4NCi0gKiANCisgKg0KICAqIEBhdXRob3IgQm9iIFRhcmxpbmcN CiAgKi8NCiBjbGFzcyBEZWZhdWx0VW5kb01hbmFnZXIgaW1wbGVtZW50cyBVbmRvTWFuYWdlciB7 DQotICAgIA0KKw0KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCi0gICAg ICAgIExvZ2dlci5nZXRMb2dnZXIoRGVmYXVsdFVuZG9NYW5hZ2VyLmNsYXNzKTsNCisgICAgICAg IExvZ2dlci5nZXRMb2dnZXIoRGVmYXVsdFVuZG9NYW5hZ2VyLmNsYXNzLmdldE5hbWUoKSk7DQog DQogICAgIC8qKg0KICAgICAgKiBUaGUgbnVtYmVyIG9mIHVuZG9hYmxlIGNvbW1hbmRzIHRvIHN0 b3JlLiBXaGVuIHNldCB0byB6ZXJvIHVuZG8gaXMNCiAgICAgICogZGlzYWJsZWQgZW50aXJlbHku DQogICAgICAqLw0KICAgICBwcml2YXRlIGludCB1bmRvTWF4ID0gMDsNCi0gICAgDQorDQogICAg IHByaXZhdGUgQXJyYXlMaXN0PFByb3BlcnR5Q2hhbmdlTGlzdGVuZXI+IGxpc3RlbmVycyA9DQog ICAgICAgICBuZXcgQXJyYXlMaXN0PFByb3BlcnR5Q2hhbmdlTGlzdGVuZXI+KCk7DQotICAgIA0K Kw0KICAgICAvKioNCiAgICAgICogU2V0IHdoZW4gYSBuZXcgdXNlciBpbnRlcmFjdGlvbiBiZWdp bnMNCiAgICAgICovDQogICAgIHByaXZhdGUgYm9vbGVhbiBuZXdJbnRlcmFjdGlvbiA9IHRydWU7 DQotICAgIA0KKw0KICAgICAvKioNCiAgICAgICogVGhlIHByb2plY3QgdG8gd2hpY2ggdGhpcyB1 bmRvIG1hbmFnZXIgcmVsYXRlcw0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSBmaW5hbCBQcm9qZWN0 IHByb2plY3Q7DQotICAgIA0KKw0KICAgICAvKioNCiAgICAgICogQSBkZXNjcmlwdGlvbiBvZiB0 aGUgdXNlciBpbnRlcmFjdGlvbiB0YWtpbmcgcGxhY2UuDQogICAgICAqIE9mdGVuIHRoaXMgaXMg dGhlIGxhYmVsIG9mIGFuIEFjdGlvbi4NCiAgICAgICovDQogICAgIHByaXZhdGUgU3RyaW5nIG5l d0ludGVyYWN0aW9uTGFiZWw7DQotICAgIA0KKw0KICAgICBwcml2YXRlIFVuZG9TdGFjayB1bmRv U3RhY2sgPSBuZXcgVW5kb1N0YWNrKCk7DQogICAgIHByaXZhdGUgUmVkb1N0YWNrIHJlZG9TdGFj ayA9IG5ldyBSZWRvU3RhY2soKTsNCi0gICAgDQorDQogICAgIC8qKg0KICAgICAgKiBAZGVwcmVj YXRlZCBpbiAwLjMyIGFscGhhIGJ5IEJvYiBUYXJsaW5nIHVzZSBEZWZhdWx0VW5kb01hbmFnZXIo UHJvamVjdCkNCiAgICAgICovDQpAQCAtMTAyLDEyICsxMDMsMTIgQEANCiAgICAgICAgIHN1cGVy KCk7DQogICAgICAgICBwcm9qZWN0ID0gbnVsbDsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgRGVm YXVsdFVuZG9NYW5hZ2VyKFByb2plY3QgcHJvamVjdCkgew0KICAgICAgICAgc3VwZXIoKTsNCiAg ICAgICAgIHRoaXMucHJvamVjdCA9IHByb2plY3Q7DQogICAgIH0NCi0gICAgDQorDQogICAgIC8q Kg0KICAgICAgKiBAZGVwcmVjYXRlZCBpbiAwLjMyIGFscGhhIGJ5IEJvYiBUYXJsaW5nIHVzZSBE ZWZhdWx0VW5kb01hbmFnZXIoUHJvamVjdCkNCiAgICAgICovDQpAQCAtMTE1LDEyICsxMTYsMTIg QEANCiAgICAgcHVibGljIHN0YXRpYyBVbmRvTWFuYWdlciBnZXRJbnN0YW5jZSgpIHsNCiAgICAg ICAgIHJldHVybiBJTlNUQU5DRTsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgcHVibGljIHN5bmNo cm9uaXplZCBPYmplY3QgZXhlY3V0ZShDb21tYW5kIGNvbW1hbmQpIHsNCiAgICAgICAgIGFkZENv bW1hbmQoY29tbWFuZCk7DQogICAgICAgICByZXR1cm4gY29tbWFuZC5leGVjdXRlKCk7DQogICAg IH0NCi0gICAgDQorDQogICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBhZGRDb21tYW5kKENv bW1hbmQgY29tbWFuZCkgew0KIA0KICAgICAgICAgLy8gVE9ETzogT25jZSB0aGUgZGVmYXVsdCBj b25zdHJ1Y3RvciBpcyBkZWxldGVkIHdlIG9ubHkgc2V0IGRpcnR5IGZsYWcNCkBAIC0xMjksMTEg KzEzMCwxMSBAQA0KICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICBQcm9qZWN0TWFuYWdl ci5nZXRNYW5hZ2VyKCkuc2V0U2F2ZUVuYWJsZWQodHJ1ZSk7DQogICAgICAgICB9DQotICAgICAg ICANCisNCiAgICAgICAgIGlmICh1bmRvTWF4ID09IDApIHsNCiAgICAgICAgICAgICByZXR1cm47 DQogICAgICAgICB9DQotICAgICAgICANCisNCiAgICAgICAgIGlmICghY29tbWFuZC5pc1VuZG9h YmxlKCkpIHsNCiAgICAgICAgICAgICB1bmRvU3RhY2suY2xlYXIoKTsNCiAgICAgICAgICAgICBu ZXdJbnRlcmFjdGlvbiA9IHRydWU7DQpAQCAtMTUzLDcgKzE1NCw3IEBADQogICAgICAgICB9DQog ICAgICAgICBtYWNyb0NvbW1hbmQuYWRkQ29tbWFuZChjb21tYW5kKTsNCiAgICAgfQ0KLSAgICAN CisNCiAgICAgcHVibGljIHZvaWQgc2V0VW5kb01heChpbnQgbWF4KSB7DQogICAgICAgICB1bmRv TWF4ID0gbWF4Ow0KICAgICB9DQpAQCAtMTY3LDUyICsxNjgsNTIgQEANCiAgICAgICAgIH0NCiAg ICAgICAgIHJlZG9TdGFjay5wdXNoKGNvbW1hbmQpOw0KICAgICB9DQotICAgIA0KKw0KIA0KICAg ICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVkbygpIHsNCiAgICAgICAgIGZpbmFsIEludGVy YWN0aW9uIGNvbW1hbmQgPSByZWRvU3RhY2sucG9wKCk7DQogICAgICAgICBjb21tYW5kLmV4ZWN1 dGUoKTsNCiAgICAgICAgIHVuZG9TdGFjay5wdXNoKGNvbW1hbmQpOw0KICAgICB9DQotICAgIA0K Kw0KICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc3RhcnRJbnRlcmFjdGlvbihTdHJpbmcg bGFiZWwpIHsNCi0gICAgICAgIExPRy5kZWJ1ZygiU3RhcnRpbmcgaW50ZXJhY3Rpb24gIiArIGxh YmVsKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgIlN0YXJ0aW5nIGludGVyYWN0aW9u IHswfSIsIGxhYmVsKTsNCiAgICAgICAgIHRoaXMubmV3SW50ZXJhY3Rpb25MYWJlbCA9IGxhYmVs Ow0KICAgICAgICAgbmV3SW50ZXJhY3Rpb24gPSB0cnVlOw0KICAgICB9DQotIA0KKw0KICAgICBw dWJsaWMgdm9pZCBhZGRQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKFByb3BlcnR5Q2hhbmdlTGlzdGVu ZXIgbGlzdGVuZXIpIHsNCiAgICAgICAgIGxpc3RlbmVycy5hZGQobGlzdGVuZXIpOw0KICAgICB9 DQotICAgIA0KKw0KICAgICBwdWJsaWMgdm9pZCByZW1vdmVQcm9wZXJ0eUNoYW5nZUxpc3RlbmVy KFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIpIHsNCiAgICAgICAgIGxpc3RlbmVycy5y ZW1vdmUobGlzdGVuZXIpOw0KICAgICB9DQotICAgIA0KKw0KICAgICBwcml2YXRlIHZvaWQgZmly ZShmaW5hbCBTdHJpbmcgcHJvcGVydHksIGZpbmFsIE9iamVjdCB2YWx1ZSkgew0KICAgICAgICAg Zm9yIChQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyIGxpc3RlbmVyIDogbGlzdGVuZXJzKSB7DQogICAg ICAgICAgICAgbGlzdGVuZXIucHJvcGVydHlDaGFuZ2UoDQogICAgICAgICAgICAgICAgICAgICBu ZXcgUHJvcGVydHlDaGFuZ2VFdmVudCh0aGlzLCBwcm9wZXJ0eSwgIiIsIHZhbHVlKSk7DQogICAg ICAgICB9DQogICAgIH0NCi0gICAgDQorDQogICAgIC8qKg0KICAgICAgKiBBbiBJbnRlcmFjdCBp cyBhIENvbW1hbmQgdGhlIGNvbnRhaW5zIGEgbGlzdCBvZiBzdWItY29tbWFuZHMuIEl0DQogICAg ICAqIHJlcHJlc2VudHMgYSBzaW5nbGUgdXNlciBpbnRlcmFjdGlvbiBhbmQgY29udGFpbnMgYWxs IHRoZSBjb21tYW5kcw0KICAgICAgKiBleGVjdXRlZCBhcyBwYXJ0IG9mIHRoYXQgaW50ZXJhY3Rp b24uDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAYXV0aG9yIEJvYg0KICAgICAgKi8NCiAg ICAgY2xhc3MgSW50ZXJhY3Rpb24gZXh0ZW5kcyBBYnN0cmFjdENvbW1hbmQgew0KLSAgICAgICAg DQorDQogICAgICAgICBwcml2YXRlIExpc3Q8Q29tbWFuZD4gY29tbWFuZHMgPSBuZXcgQXJyYXlM aXN0PENvbW1hbmQ+KCk7DQotICAgICAgICANCisNCiAgICAgICAgIHByaXZhdGUgU3RyaW5nIGxh YmVsOw0KLSAgICAgICAgDQorDQogICAgICAgICBJbnRlcmFjdGlvbihTdHJpbmcgbGJsKSB7DQog ICAgICAgICAgICAgbGFiZWwgPSBsYmw7DQogICAgICAgICB9DQotICAgICAgICANCisNCiAgICAg ICAgIHB1YmxpYyB2b2lkIHVuZG8oKSB7DQogICAgICAgICAgICAgZmluYWwgTGlzdEl0ZXJhdG9y PENvbW1hbmQ+IGl0ID0NCiAgICAgICAgICAgICAgICAgY29tbWFuZHMubGlzdEl0ZXJhdG9yKGNv bW1hbmRzLnNpemUoKSk7DQpAQCAtMjIwLDcgKzIyMSw3IEBADQogICAgICAgICAgICAgICAgIGl0 LnByZXZpb3VzKCkudW5kbygpOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCi0gICAgICAg IA0KKw0KICAgICAgICAgcHVibGljIE9iamVjdCBleGVjdXRlKCkgew0KICAgICAgICAgICAgIGZp bmFsIEl0ZXJhdG9yPENvbW1hbmQ+IGl0ID0gY29tbWFuZHMuaXRlcmF0b3IoKTsNCiAgICAgICAg ICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7DQpAQCAtMjI4LDcgKzIyOSw3IEBADQogICAgICAg ICAgICAgfQ0KICAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICAgfQ0KLSAgICAgICAg DQorDQogICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1VuZG9hYmxlKCkgew0KICAgICAgICAgICAg IGZpbmFsIEl0ZXJhdG9yPENvbW1hbmQ+IGl0ID0gY29tbWFuZHMuaXRlcmF0b3IoKTsNCiAgICAg ICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7DQpAQCAtMjM5LDcgKzI0MCw3IEBADQogICAg ICAgICAgICAgfQ0KICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgfQ0KLSAgICAg ICAgDQorDQogICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1JlZG9hYmxlKCkgew0KICAgICAgICAg ICAgIGZpbmFsIEl0ZXJhdG9yPENvbW1hbmQ+IGl0ID0gY29tbWFuZHMuaXRlcmF0b3IoKTsNCiAg ICAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7DQpAQCAtMjUwLDExICsyNTEsMTEgQEAN CiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICB9DQot ICAgICAgICANCisNCiAgICAgICAgIHByaXZhdGUgdm9pZCBhZGRDb21tYW5kKENvbW1hbmQgY29t bWFuZCkgew0KICAgICAgICAgICAgIGNvbW1hbmRzLmFkZChjb21tYW5kKTsNCiAgICAgICAgIH0N Ci0gICAgICAgIA0KKw0KICAgICAgICAgLy8gVE9ETzogaTE4bg0KICAgICAgICAgcHJpdmF0ZSBT dHJpbmcgZ2V0VW5kb0xhYmVsKCkgew0KICAgICAgICAgICAgIGlmIChpc1VuZG9hYmxlKCkpIHsN CkBAIC0yNjMsNyArMjY0LDcgQEANCiAgICAgICAgICAgICAgICAgcmV0dXJuICJDYW4ndCBVbmRv ICIgKyBsYWJlbDsNCiAgICAgICAgICAgICB9DQogICAgICAgICB9DQotICAgICAgICANCisNCiAg ICAgICAgIC8vIFRPRE86IGkxOG4NCiAgICAgICAgIHByaXZhdGUgU3RyaW5nIGdldFJlZG9MYWJl bCgpIHsNCiAgICAgICAgICAgICBpZiAoaXNSZWRvYWJsZSgpKSB7DQpAQCAtMjcyLDE5ICsyNzMs MTkgQEANCiAgICAgICAgICAgICAgICAgcmV0dXJuICJDYW4ndCBSZWRvICIgKyBsYWJlbDsNCiAg ICAgICAgICAgICB9DQogICAgICAgICB9DQotICAgICAgICANCisNCiAgICAgICAgIExpc3Q8Q29t bWFuZD4gZ2V0Q29tbWFuZHMoKSB7DQogICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8 Q29tbWFuZD4gKGNvbW1hbmRzKTsNCiAgICAgICAgIH0NCiAgICAgfQ0KLSAgICANCisNCiAgICAg cHJpdmF0ZSBhYnN0cmFjdCBjbGFzcyBJbnRlcmFjdGlvblN0YWNrIGV4dGVuZHMgU3RhY2s8SW50 ZXJhY3Rpb24+IHsNCi0gICAgICAgIA0KKw0KICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbGFiZWxQ cm9wZXJ0eTsNCiAgICAgICAgIHByaXZhdGUgU3RyaW5nIGFkZGVkUHJvcGVydHk7DQogICAgICAg ICBwcml2YXRlIFN0cmluZyByZW1vdmVkUHJvcGVydHk7DQogICAgICAgICBwcml2YXRlIFN0cmlu ZyBzaXplUHJvcGVydHk7DQotICAgICAgICANCisNCiAgICAgICAgIHB1YmxpYyBJbnRlcmFjdGlv blN0YWNrKA0KICAgICAgICAgICAgICAgICBTdHJpbmcgbGFiZWxQcm9wLA0KICAgICAgICAgICAg ICAgICBTdHJpbmcgYWRkZWRQcm9wLA0KQEAgLTI5NSw3ICsyOTYsNyBAQA0KICAgICAgICAgICAg IHJlbW92ZWRQcm9wZXJ0eSA9IHJlbW92ZWRQcm9wOw0KICAgICAgICAgICAgIHNpemVQcm9wZXJ0 eSA9IHNpemVQcm9wOw0KICAgICAgICAgfQ0KLSAgICAgICAgDQorDQogICAgICAgICBwdWJsaWMg SW50ZXJhY3Rpb24gcHVzaChJbnRlcmFjdGlvbiBpdGVtKSB7DQogICAgICAgICAgICAgc3VwZXIu cHVzaChpdGVtKTsNCiAgICAgICAgICAgICBmaXJlTGFiZWwoKTsNCkBAIC0zMDMsNyArMzA0LDcg QEANCiAgICAgICAgICAgICBmaXJlKHNpemVQcm9wZXJ0eSwgc2l6ZSgpKTsNCiAgICAgICAgICAg ICByZXR1cm4gaXRlbTsNCiAgICAgICAgIH0NCi0gICAgICAgIA0KKw0KICAgICAgICAgcHVibGlj IEludGVyYWN0aW9uIHBvcCgpIHsNCiAgICAgICAgICAgICBJbnRlcmFjdGlvbiBpdGVtID0gc3Vw ZXIucG9wKCk7DQogICAgICAgICAgICAgZmlyZUxhYmVsKCk7DQpAQCAtMzExLDE2ICszMTIsMTYg QEANCiAgICAgICAgICAgICBmaXJlKHNpemVQcm9wZXJ0eSwgc2l6ZSgpKTsNCiAgICAgICAgICAg ICByZXR1cm4gaXRlbTsNCiAgICAgICAgIH0NCi0gICAgICAgIA0KKw0KICAgICAgICAgcHJpdmF0 ZSB2b2lkIGZpcmVMYWJlbCgpIHsNCiAgICAgICAgICAgICBmaXJlKGxhYmVsUHJvcGVydHksIGdl dExhYmVsKCkpOw0KICAgICAgICAgfQ0KLSAgICAgICAgDQorDQogICAgICAgICBwcm90ZWN0ZWQg YWJzdHJhY3QgU3RyaW5nIGdldExhYmVsKCk7DQogICAgIH0NCi0gICAgDQorDQogICAgIHByaXZh dGUgY2xhc3MgVW5kb1N0YWNrIGV4dGVuZHMgSW50ZXJhY3Rpb25TdGFjayB7DQotICAgICAgICAN CisNCiAgICAgICAgIHB1YmxpYyBVbmRvU3RhY2soKSB7DQogICAgICAgICAgICAgc3VwZXIoDQog ICAgICAgICAgICAgICAgICAgICAidW5kb0xhYmVsIiwNCkBAIC0zMjgsNyArMzI5LDcgQEANCiAg ICAgICAgICAgICAgICAgICAgICJ1bmRvUmVtb3ZlZCIsDQogICAgICAgICAgICAgICAgICAgICAi dW5kb1NpemUiKTsNCiAgICAgICAgIH0NCi0gICAgICAgIA0KKw0KICAgICAgICAgcHVibGljIElu dGVyYWN0aW9uIHB1c2goSW50ZXJhY3Rpb24gaXRlbSkgew0KICAgICAgICAgICAgIHN1cGVyLnB1 c2goaXRlbSk7DQogICAgICAgICAgICAgaWYgKGl0ZW0uaXNVbmRvYWJsZSgpKSB7DQpAQCAtMzM2 LDcgKzMzNyw3IEBADQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIHJldHVybiBpdGVtOw0K ICAgICAgICAgfQ0KLSAgICAgICAgDQorDQogICAgICAgICBwdWJsaWMgSW50ZXJhY3Rpb24gcG9w KCkgew0KICAgICAgICAgICAgIEludGVyYWN0aW9uIGl0ZW0gPSBzdXBlci5wb3AoKTsNCiAgICAg ICAgICAgICBpZiAoc2l6ZSgpID09IDAgfHwgIXBlZWsoKS5pc1VuZG9hYmxlKCkpIHsNCkBAIC0z NDQsMTMgKzM0NSwxMyBAQA0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICByZXR1cm4gaXRl bTsNCiAgICAgICAgIH0NCi0gICAgICAgIA0KKw0KICAgICAgICAgcHVibGljIHZvaWQgY2xlYXIo KSB7DQogICAgICAgICAgICAgc3VwZXIuY2xlYXIoKTsNCiAgICAgICAgICAgICBmaXJlKCJ1bmRv U2l6ZSIsIHNpemUoKSk7DQogICAgICAgICAgICAgZmlyZSgidW5kb2FibGUiLCBmYWxzZSk7DQog ICAgICAgICB9DQotICAgICAgICANCisNCiAgICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0TGFi ZWwoKSB7DQogICAgICAgICAgICAgaWYgKGVtcHR5KCkpIHsNCiAgICAgICAgICAgICAgICAgcmV0 dXJuIFRyYW5zbGF0b3IubG9jYWxpemUoImFjdGlvbi51bmRvIik7DQpAQCAtMzU5LDE4ICszNjAs MTggQEANCiAgICAgICAgICAgICB9DQogICAgICAgICB9DQogICAgIH0NCi0gICAgDQorDQogICAg IHByaXZhdGUgY2xhc3MgUmVkb1N0YWNrIGV4dGVuZHMgSW50ZXJhY3Rpb25TdGFjayB7DQotICAg ICAgICANCisNCiAgICAgICAgIHB1YmxpYyBSZWRvU3RhY2soKSB7DQogICAgICAgICAgICAgc3Vw ZXIoDQotICAgICAgICAgICAgICAgICAgICAicmVkb0xhYmVsIiwgDQotICAgICAgICAgICAgICAg ICAgICAicmVkb0FkZGVkIiwgDQotICAgICAgICAgICAgICAgICAgICAicmVkb1JlbW92ZWQiLCAN CisgICAgICAgICAgICAgICAgICAgICJyZWRvTGFiZWwiLA0KKyAgICAgICAgICAgICAgICAgICAg InJlZG9BZGRlZCIsDQorICAgICAgICAgICAgICAgICAgICAicmVkb1JlbW92ZWQiLA0KICAgICAg ICAgICAgICAgICAgICAgInJlZG9TaXplIik7DQogICAgICAgICB9DQotICAgICAgICANCi0gICAg ICAgIA0KKw0KKw0KICAgICAgICAgcHVibGljIEludGVyYWN0aW9uIHB1c2goSW50ZXJhY3Rpb24g aXRlbSkgew0KICAgICAgICAgICAgIHN1cGVyLnB1c2goaXRlbSk7DQogICAgICAgICAgICAgaWYg KGl0ZW0uaXNSZWRvYWJsZSgpKSB7DQpAQCAtMzc4LDcgKzM3OSw3IEBADQogICAgICAgICAgICAg fQ0KICAgICAgICAgICAgIHJldHVybiBpdGVtOw0KICAgICAgICAgfQ0KLSAgICAgICAgDQorDQog ICAgICAgICBwdWJsaWMgSW50ZXJhY3Rpb24gcG9wKCkgew0KICAgICAgICAgICAgIEludGVyYWN0 aW9uIGl0ZW0gPSBzdXBlci5wb3AoKTsNCiAgICAgICAgICAgICBpZiAoc2l6ZSgpID09IDAgfHwg IXBlZWsoKS5pc1JlZG9hYmxlKCkpIHsNCkBAIC0zODYsMTMgKzM4NywxMyBAQA0KICAgICAgICAg ICAgIH0NCiAgICAgICAgICAgICByZXR1cm4gaXRlbTsNCiAgICAgICAgIH0NCi0gICAgICAgIA0K Kw0KICAgICAgICAgcHVibGljIHZvaWQgY2xlYXIoKSB7DQogICAgICAgICAgICAgc3VwZXIuY2xl YXIoKTsNCiAgICAgICAgICAgICBmaXJlKCJyZWRvU2l6ZSIsIHNpemUoKSk7DQogICAgICAgICAg ICAgZmlyZSgicmVkb2FibGUiLCBmYWxzZSk7DQogICAgICAgICB9DQotICAgICAgICANCisNCiAg ICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0TGFiZWwoKSB7DQogICAgICAgICAgICAgaWYgKGVt cHR5KCkpIHsNCiAgICAgICAgICAgICAgICAgcmV0dXJuIFRyYW5zbGF0b3IubG9jYWxpemUoImFj dGlvbi5yZWRvIik7DQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9h cmdvdW1sL2tlcm5lbC9NZW1iZXJMaXN0LmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlz Lm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcv YXJnb3VtbC9rZXJuZWwvTWVtYmVyTGlzdC5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIx PTE5OTA2JnIyPTE5OTA3DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJn b3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2tlcm5lbC9NZW1iZXJMaXN0LmphdmEJKG9yaWdpbmFs KQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwva2VybmVsL01lbWJl ckxpc3QuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8q ICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29u dHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJp YnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFt IGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdo aWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpA QCAtNDMsOCArNDMsOSBAQA0KIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7DQogaW1wb3J0IGph dmEudXRpbC5MaXN0Ow0KIGltcG9ydCBqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yOw0KK2ltcG9ydCBq YXZhLnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2Vy Ow0KIA0KLWltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsNCiBpbXBvcnQgb3JnLmFyZ291 bWwudW1sLlByb2plY3RNZW1iZXJNb2RlbDsNCiBpbXBvcnQgb3JnLmFyZ291bWwudW1sLmNvZ25p dGl2ZS5Qcm9qZWN0TWVtYmVyVG9kb0xpc3Q7DQogaW1wb3J0IG9yZy5hcmdvdW1sLnVtbC5kaWFn cmFtLkFyZ29EaWFncmFtOw0KQEAgLTUyLDM0ICs1MywzNCBAQA0KIA0KIC8qKg0KICAqIExpc3Qg b2YgUHJvamVjdE1lbWJlcnMuIDxwPg0KLSAqIA0KLSAqIDxwPlRoZSBwcm9qZWN0IG1lbWJlcnMg YXJlIGdyb3VwZWQgaW50byA0IGNhdGVnb3JpZXM6IA0KKyAqDQorICogPHA+VGhlIHByb2plY3Qg bWVtYmVycyBhcmUgZ3JvdXBlZCBpbnRvIDQgY2F0ZWdvcmllczoNCiAgKiBtb2RlbCwgZGlhZ3Jh bXMsIHRoZSB0b2RvIGl0ZW0gbGlzdCBhbmQgdGhlIHByb2ZpbGUgY29uZmlndXJhdGlvbi4gPHA+ DQogICoNCi0gKiA8cD5UaGUgcHVycG9zZSBvZiB0aGVzZSBjYXRlZ29yaWVzIGlzIHRvIG1ha2Ug c3VyZSB0aGF0IG1lbWJlcnMgYXJlIHJlYWQgDQotICogYW5kIHdyaXR0ZW4gaW4gdGhlIGNvcnJl Y3Qgb3JkZXIuIA0KLSAqIA0KKyAqIDxwPlRoZSBwdXJwb3NlIG9mIHRoZXNlIGNhdGVnb3JpZXMg aXMgdG8gbWFrZSBzdXJlIHRoYXQgbWVtYmVycyBhcmUgcmVhZA0KKyAqIGFuZCB3cml0dGVuIGlu IHRoZSBjb3JyZWN0IG9yZGVyLg0KKyAqDQogICogPHA+V2hlbiByZWFkaW5nIHRoZSB0b2RvIGl0 ZW1zIGl0IHdpbGwgZmFpbCBpZiB0aGUgZGlhZ3JhbXMgZWxlbWVudHMgb3IgbW9kZWwNCiAgKiBl bGVtZW50cyBoYXZlIG5vdCB5ZXQgYmVlbiByZWFkIHRoYXQgdGhleSByZWZlciB0by4gV2hlbiBy ZWFkaW5nIGRpYWdyYW1zDQogICogdGhhdCB3aWxsIGZhaWwgaWYgdGhlIG1vZGVsIGVsZW1lbnRz IGRvbid0IHlldCBleGlzdCB0aGF0IHRoZXkgcmVmZXIgdG8uDQogICogV2hlbiBsb2FkaW5nIHRo ZSBtb2RlbCB0aGF0IG1heSBmYWlsIGlmIHRoZSBjb3JyZWN0IHByb2ZpbGUgaGFzIG5vdCBiZWVu DQogICogbG9hZGVkLg0KLSAqIA0KKyAqDQogICogPHA+SGVuY2UsIHRoZSBzYXZlIChhbmQgdGhl cmVmb3JlIGxvYWQpIG9yZGVyIGlzIHByb2ZpbGUsIG1vZGVsLCBkaWFncmFtcywNCiAgKiB0b2Rv IGl0ZW1zLg0KICAqDQogICogPHA+VGhpcyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBvbmx5IG9u ZSBwcm9maWxlIGNvbmZpZ3VyYXRpb24sIG9uZSBtb2RlbA0KICAqIG1lbWJlciwgbXVsdGlwbGUg ZGlhZ3JhbSBtZW1iZXJzLCBvbmUgdG9kbyBsaXN0IG1lbWJlci4NCi0gKiANCisgKg0KICAqIDxw PkNvbW1lbnRzIGJ5IG12dzogPHA+DQotICogVGhpcyBjbGFzcyBzaG91bGQgYmUgcmV3b3JrZWQg dG8gYmUgaW5kZXBlbmRlbnQgDQotICogb2YgdGhlIG9yZy5hcmdvdW1sLnVtbCBwYWNrYWdlLiBU aGF0IGNhbiBiZSBkb25lIGJ5IGV4dGVuZGluZyB0aGUgDQotICogUHJvamVjdE1lbWJlciBpbnRl cmZhY2Ugd2l0aCBmdW5jdGlvbnMgcmV0dXJuaW5nIHRoZSBzb3J0aW5nIG9yZGVyLCANCisgKiBU aGlzIGNsYXNzIHNob3VsZCBiZSByZXdvcmtlZCB0byBiZSBpbmRlcGVuZGVudA0KKyAqIG9mIHRo ZSBvcmcuYXJnb3VtbC51bWwgcGFja2FnZS4gVGhhdCBjYW4gYmUgZG9uZSBieSBleHRlbmRpbmcg dGhlDQorICogUHJvamVjdE1lbWJlciBpbnRlcmZhY2Ugd2l0aCBmdW5jdGlvbnMgcmV0dXJuaW5n IHRoZSBzb3J0aW5nIG9yZGVyLA0KICAqIGFuZCBpZiBtdWx0aXBsZSBlbnRyaWVzIG9mIHRoZSBz YW1lIHR5cGUgYXJlIGFsbG93ZWQuIDxwPg0KLSAqIA0KLSAqIEluIHByZXBhcmF0aW9uLCB0aGlz IGNsYXNzIGlzIG1hZGUgc2ltcGxlciBieSBkZXByZWNhdGluZyANCisgKg0KKyAqIEluIHByZXBh cmF0aW9uLCB0aGlzIGNsYXNzIGlzIG1hZGUgc2ltcGxlciBieSBkZXByZWNhdGluZw0KICAqIGFs bCBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBMaXN0IGludGVyZmFjZS4NCi0g KiANCisgKg0KICAqIEBhdXRob3IgQm9iIFRhcmxpbmcNCiAgKi8NCiBjbGFzcyBNZW1iZXJMaXN0 IGltcGxlbWVudHMgTGlzdDxQcm9qZWN0TWVtYmVyPiB7DQpAQCAtODcsMTEgKzg4LDEyIEBADQog ICAgIC8qKg0KICAgICAgKiBMb2dnZXIuDQogICAgICAqLw0KLSAgICBwcml2YXRlIHN0YXRpYyBm aW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyLmdldExvZ2dlcihNZW1iZXJMaXN0LmNsYXNzKTsNCisg ICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9DQorICAgICAgICBMb2dnZXIuZ2V0 TG9nZ2VyKE1lbWJlckxpc3QuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgcHJpdmF0ZSBBYnN0 cmFjdFByb2plY3RNZW1iZXIgbW9kZWw7DQogDQotICAgIHByaXZhdGUgTGlzdDxQcm9qZWN0TWVt YmVyRGlhZ3JhbT4gZGlhZ3JhbU1lbWJlcnMgPSANCisgICAgcHJpdmF0ZSBMaXN0PFByb2plY3RN ZW1iZXJEaWFncmFtPiBkaWFncmFtTWVtYmVycyA9DQogICAgICAgICBuZXcgQXJyYXlMaXN0PFBy b2plY3RNZW1iZXJEaWFncmFtPigxMCk7DQogDQogICAgIHByaXZhdGUgQWJzdHJhY3RQcm9qZWN0 TWVtYmVyIHRvZG9MaXN0Ow0KQEAgLTEwMSw3ICsxMDMsNyBAQA0KICAgICAgKiBUaGUgY29uc3Ry dWN0b3IuDQogICAgICAqLw0KICAgICBwdWJsaWMgTWVtYmVyTGlzdCgpIHsNCi0gICAgICAgIExP Ry5pbmZvKCJDcmVhdGluZyBhIG1lbWJlciBsaXN0Iik7DQorICAgICAgICBMT0cubG9nKExldmVs LklORk8sICJDcmVhdGluZyBhIG1lbWJlciBsaXN0Iik7DQogICAgIH0NCiANCiAgICAgcHVibGlj IHN5bmNocm9uaXplZCBib29sZWFuIGFkZChQcm9qZWN0TWVtYmVyIG1lbWJlcikgew0KQEAgLTEy NSw3ICsxMjcsNyBAQA0KICAgICB9DQogDQogICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgYm9vbGVh biByZW1vdmUoT2JqZWN0IG1lbWJlcikgew0KLSAgICAgICAgTE9HLmluZm8oIlJlbW92aW5nIGEg bWVtYmVyIik7DQorICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJSZW1vdmluZyBhIG1lbWJl ciIpOw0KICAgICAgICAgaWYgKG1lbWJlciBpbnN0YW5jZW9mIEFyZ29EaWFncmFtKSB7DQogICAg ICAgICAgICAgcmV0dXJuIHJlbW92ZURpYWdyYW0oKEFyZ29EaWFncmFtKSBtZW1iZXIpOw0KICAg ICAgICAgfQ0KQEAgLTEzNCwxNyArMTM2LDE4IEBADQogICAgICAgICAgICAgbW9kZWwgPSBudWxs Ow0KICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgfSBlbHNlIGlmICh0b2RvTGlz dCA9PSBtZW1iZXIpIHsNCi0gICAgICAgICAgICBMT0cuaW5mbygiUmVtb3ZpbmcgdG9kbyBsaXN0 Iik7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLCAiUmVtb3ZpbmcgdG9kbyBsaXN0 Iik7DQogICAgICAgICAgICAgc2V0VG9kb0xpc3QobnVsbCk7DQogICAgICAgICAgICAgcmV0dXJu IHRydWU7DQogICAgICAgICB9IGVsc2UgaWYgKHByb2ZpbGVDb25maWd1cmF0aW9uID09IG1lbWJl cikgew0KLSAgICAgICAgICAgIExPRy5pbmZvKCJSZW1vdmluZyBwcm9maWxlIGNvbmZpZ3VyYXRp b24iKTsNCisgICAgICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJSZW1vdmluZyBwcm9maWxl IGNvbmZpZ3VyYXRpb24iKTsNCiAgICAgICAgICAgICBwcm9maWxlQ29uZmlndXJhdGlvbiA9IG51 bGw7DQogICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICB9IGVsc2Ugew0KICAgICAg ICAgICAgIGZpbmFsIGJvb2xlYW4gcmVtb3ZlZCA9IGRpYWdyYW1NZW1iZXJzLnJlbW92ZShtZW1i ZXIpOw0KICAgICAgICAgICAgIGlmICghcmVtb3ZlZCkgew0KLSAgICAgICAgICAgICAgICBMT0cu d2FybigiRmFpbGVkIHRvIHJlbW92ZSBkaWFncmFtIG1lbWJlciAiICsgbWVtYmVyKTsNCisgICAg ICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5XQVJOSU5HLA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICJGYWlsZWQgdG8gcmVtb3ZlIGRpYWdyYW0gbWVtYmVyICIgKyBtZW1iZXIpOw0KICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgICByZXR1cm4gcmVtb3ZlZDsNCiAgICAgICAgIH0NCkBAIC0x NjMsMTEgKzE2NiwxMSBAQA0KICAgICB9DQogDQogICAgIC8qKg0KLSAgICAgKiBAcmV0dXJuIHRo ZSBsaXN0IG9mIG1lbWJlcnMgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBuZWVkIHRvIGJlIHdyaXR0 ZW4gDQorICAgICAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgbWVtYmVycyBpbiB0aGUgb3JkZXIgdGhh dCB0aGV5IG5lZWQgdG8gYmUgd3JpdHRlbg0KICAgICAgKiAgICAgICAgIG91dCBpbi4NCiAgICAg ICovDQogICAgIHByaXZhdGUgTGlzdDxQcm9qZWN0TWVtYmVyPiBidWlsZE9yZGVyZWRNZW1iZXJM aXN0KCkgew0KLSAgICAgICAgTGlzdDxQcm9qZWN0TWVtYmVyPiB0ZW1wID0gDQorICAgICAgICBM aXN0PFByb2plY3RNZW1iZXI+IHRlbXAgPQ0KICAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8UHJv amVjdE1lbWJlcj4oc2l6ZSgpKTsNCiAgICAgICAgIGlmIChwcm9maWxlQ29uZmlndXJhdGlvbiAh PSBudWxsKSB7DQogICAgICAgICAgICAgdGVtcC5hZGQocHJvZmlsZUNvbmZpZ3VyYXRpb24pOw0K QEAgLTE4MSw3ICsxODQsNyBAQA0KICAgICAgICAgfQ0KICAgICAgICAgcmV0dXJuIHRlbXA7DQog ICAgIH0NCi0gICAgDQorDQogICAgIHByaXZhdGUgYm9vbGVhbiByZW1vdmVEaWFncmFtKEFyZ29E aWFncmFtIGQpIHsNCiAgICAgICAgIGZvciAoUHJvamVjdE1lbWJlckRpYWdyYW0gcG1kIDogZGlh Z3JhbU1lbWJlcnMpIHsNCiAgICAgICAgICAgICBpZiAocG1kLmdldERpYWdyYW0oKSA9PSBkKSB7 DQpAQCAtMTkwLDcgKzE5Myw3IEBADQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAg ICAgICAgICAgIH0NCiAgICAgICAgIH0NCi0gICAgICAgIExPRy5kZWJ1ZygiRmFpbGVkIHRvIHJl bW92ZSBkaWFncmFtICIgKyBkKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgIkZhaWxl ZCB0byByZW1vdmUgZGlhZ3JhbSB7MH0iLCBkKTsNCiAgICAgICAgIHJldHVybiBmYWxzZTsNCiAg ICAgfQ0KIA0KQEAgLTIyMiw3ICsyMjUsNyBAQA0KICAgICB9DQogDQogICAgIHB1YmxpYyBzeW5j aHJvbml6ZWQgdm9pZCBjbGVhcigpIHsNCi0gICAgICAgIExPRy5pbmZvKCJDbGVhcmluZyBtZW1i ZXJzIik7DQorICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJDbGVhcmluZyBtZW1iZXJzIik7 DQogICAgICAgICBpZiAobW9kZWwgIT0gbnVsbCkgew0KICAgICAgICAgICAgIG1vZGVsLnJlbW92 ZSgpOw0KICAgICAgICAgfQ0KQEAgLTI1NCw3ICsyNTcsNyBAQA0KICAgICAgICAgICAgICAgICBy ZXR1cm4gcHJvZmlsZUNvbmZpZ3VyYXRpb247DQogICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0K LSAgICAgICAgDQorDQogICAgICAgICBpZiAoaSA9PSAoZGlhZ3JhbU1lbWJlcnMuc2l6ZSgpICsg MSkpIHsNCiAgICAgICAgICAgICByZXR1cm4gcHJvZmlsZUNvbmZpZ3VyYXRpb247DQogICAgICAg ICB9DQpAQCAtMjg1LDcgKzI4OCw3IEBADQogICAgIH0NCiANCiAgICAgcHJpdmF0ZSB2b2lkIHNl dFRvZG9MaXN0KEFic3RyYWN0UHJvamVjdE1lbWJlciBtZW1iZXIpIHsNCi0gICAgICAgIExPRy5p bmZvKCJTZXR0aW5nIHRvZG9MaXN0IHRvICIgKyBtZW1iZXIpOw0KKyAgICAgICAgTE9HLmxvZyhM ZXZlbC5JTkZPLCAiU2V0dGluZyB0b2RvTGlzdCB0byB7MH0iLCBtZW1iZXIpOw0KICAgICAgICAg dG9kb0xpc3QgPSBtZW1iZXI7DQogICAgIH0NCiANCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdv dW1sLWFwcC9zcmMvb3JnL2FyZ291bWwva2VybmVsL1Byb2ZpbGVDb25maWd1cmF0aW9uLmphdmEN ClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1 bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9rZXJuZWwvUHJvZmlsZUNvbmZpZ3Vy YXRpb24uamF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJn b3VtbC9rZXJuZWwvUHJvZmlsZUNvbmZpZ3VyYXRpb24uamF2YQkob3JpZ2luYWwpDQorKysgdHJ1 bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9rZXJuZWwvUHJvZmlsZUNvbmZpZ3Vy YXRpb24uamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8q ICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29u dHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJp YnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFt IGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdo aWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpA QCAtNDYsOCArNDYsOSBAQA0KIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7DQogaW1wb3J0IGph dmEudXRpbC5MaXN0Ow0KIGltcG9ydCBqYXZhLnV0aWwuU2V0Ow0KK2ltcG9ydCBqYXZhLnV0aWwu bG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KIA0KLWlt cG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwuYXBwbGlj YXRpb24uZXZlbnRzLkFyZ29FdmVudFB1bXA7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmFwcGxpY2F0 aW9uLmV2ZW50cy5BcmdvRXZlbnRUeXBlczsNCiBpbXBvcnQgb3JnLmFyZ291bWwuYXBwbGljYXRp b24uZXZlbnRzLkFyZ29Qcm9maWxlRXZlbnQ7DQpAQCAtNjMsOCArNjQsOCBAQA0KIGltcG9ydCBv cmcuYXJnb3VtbC5wcm9maWxlLlByb2ZpbGVGYWNhZGU7DQogDQogLyoqDQotICogICBUaGlzIGNs YXNzIGNhcHR1cmVzIHJlcHJlc2VudHMgdGhlIHVuaXF1ZSBhY2Nlc3MgcG9pbnQgZm9yIHRoZSAN Ci0gKiAgIGNvbmZpZ3VyYWJpbGl0eSBhbGxvd2VkIGJ5IHRoZSB1c2Ugb2YgcHJvZmlsZXMuIA0K KyAqICAgVGhpcyBjbGFzcyBjYXB0dXJlcyByZXByZXNlbnRzIHRoZSB1bmlxdWUgYWNjZXNzIHBv aW50IGZvciB0aGUNCisgKiAgIGNvbmZpZ3VyYWJpbGl0eSBhbGxvd2VkIGJ5IHRoZSB1c2Ugb2Yg cHJvZmlsZXMuDQogICoNCiAgKiAgIEBhdXRob3IgbWF1cmVsaW8xMjM0DQogICovDQpAQCAtNzIs OCArNzMsOCBAQA0KICAgICAvKioNCiAgICAgICogTG9nZ2VyLg0KICAgICAgKi8NCi0gICAgcHJp dmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlcg0KLSAgICAgICAgICAgIC5nZXRM b2dnZXIoUHJvZmlsZUNvbmZpZ3VyYXRpb24uY2xhc3MpOw0KKyAgICBwcml2YXRlIHN0YXRpYyBm aW5hbCBMb2dnZXIgTE9HID0NCisgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoUHJvZmlsZUNvbmZp Z3VyYXRpb24uY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgcHJpdmF0ZSBGb3JtYXRpbmdTdHJh dGVneSBmb3JtYXRpbmdTdHJhdGVneTsNCiANCkBAIC04NCwyNCArODUsMjQgQEANCiAgICAgcHJp dmF0ZSBMaXN0PFByb2ZpbGU+IHByb2ZpbGVzID0gbmV3IEFycmF5TGlzdDxQcm9maWxlPigpOw0K IA0KICAgICBwcml2YXRlIExpc3Q8T2JqZWN0PiBwcm9maWxlTW9kZWxzID0gbmV3IEFycmF5TGlz dDxPYmplY3Q+KCk7DQotICAgIA0KKw0KICAgICAvKioNCiAgICAgICogVGhlIGV4dGVuc2lvbiB1 c2VkIGluIHNlcmlhbGl6YXRpb24gYW5kIHJldHVybmVkIGJ5IHtAbGluayAjZ2V0VHlwZSgpfQ0K ICAgICAgKi8NCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhURU5TSU9OID0gInBy b2ZpbGUiOw0KLSAgICANCisNCiANCiAgICAgLyoqDQogICAgICAqIFRoZSBjb25maWd1cmF0aW9u IGtleSBmb3IgdGhlIGRlZmF1bHQgc3RlcmVvdHlwZSB2aWV3Lg0KICAgICAgKi8NCi0gICAgcHVi bGljIHN0YXRpYyBmaW5hbCBDb25maWd1cmF0aW9uS2V5IEtFWV9ERUZBVUxUX1NURVJFT1RZUEVf VklFVyA9IA0KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENvbmZpZ3VyYXRpb25LZXkgS0VZX0RF RkFVTFRfU1RFUkVPVFlQRV9WSUVXID0NCiAgICAgICAgIENvbmZpZ3VyYXRpb24ubWFrZUtleSgi cHJvZmlsZXMiLCAic3RlcmVvdHlwZVZpZXciKTsNCi0gICAgDQorDQogICAgIC8qKg0KLSAgICAg KiBUaGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBmb3IgdGhpcyBjbGFzcy4gU2V0cyB0aGUgZGVmYXVs dCBwcm9maWxlcyBhcyANCi0gICAgICogZ2l2ZW4gYnkge0BsaW5rIG9yZy5hcmdvdW1sLnByb2Zp bGUuUHJvZmlsZU1hbmFnZXJ9IGFzIHRoZSBwcm9maWxlcyBvZiANCisgICAgICogVGhlIGRlZmF1 bHQgY29uc3RydWN0b3IgZm9yIHRoaXMgY2xhc3MuIFNldHMgdGhlIGRlZmF1bHQgcHJvZmlsZXMg YXMNCisgICAgICogZ2l2ZW4gYnkge0BsaW5rIG9yZy5hcmdvdW1sLnByb2ZpbGUuUHJvZmlsZU1h bmFnZXJ9IGFzIHRoZSBwcm9maWxlcyBvZg0KICAgICAgKiB0aGUgcHJvamVjdC4NCi0gICAgICog DQorICAgICAqDQogICAgICAqIEBwYXJhbSBwcm9qZWN0IHRoZSBwcm9qZWN0IHRoYXQgY29udGFp bnMgdGhpcyBjb25maWd1cmF0aW9uDQogICAgICAqLw0KICAgICBwdWJsaWMgUHJvZmlsZUNvbmZp Z3VyYXRpb24oUHJvamVjdCBwcm9qZWN0KSB7DQpAQCAtMTE3LDE1ICsxMTgsMTUgQEANCiANCiAg ICAgICAgIHVwZGF0ZVN0cmF0ZWdpZXMoKTsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgLyoqDQot ICAgICAqIFRoZSBjb25zdHJ1Y3RvciBmb3IgcHJlLWRlZmluZWQgcHJvZmlsZSBjb25maWd1cmF0 aW9ucywgc3VjaCBhcyB3aGVuIGEgDQorICAgICAqIFRoZSBjb25zdHJ1Y3RvciBmb3IgcHJlLWRl ZmluZWQgcHJvZmlsZSBjb25maWd1cmF0aW9ucywgc3VjaCBhcyB3aGVuIGENCiAgICAgICogcHJv amVjdCBpcyByZWFkIGZyb20gYSBzYXZlZCBmaWxlLg0KICAgICAgKiBAcGFyYW0gcHJvamVjdCB0 aGUgcHJvamVjdCB0aGF0IGNvbnRhaW5zIHRoaXMgY29uZmlndXJhdGlvbg0KLSAgICAgKiBAcGFy YW0gY29uZmlndXJlZFByb2ZpbGVzIHRoZSB7QGxpbmsgUHJvZmlsZX1zIHRoYXQgd2lsbCBiZSB0 aGUgcHJvamVjdCANCisgICAgICogQHBhcmFtIGNvbmZpZ3VyZWRQcm9maWxlcyB0aGUge0BsaW5r IFByb2ZpbGV9cyB0aGF0IHdpbGwgYmUgdGhlIHByb2plY3QNCiAgICAgICogICAgICAgIHByb2Zp bGVzDQogICAgICAqLw0KLSAgICBwdWJsaWMgUHJvZmlsZUNvbmZpZ3VyYXRpb24oUHJvamVjdCBw cm9qZWN0LCANCisgICAgcHVibGljIFByb2ZpbGVDb25maWd1cmF0aW9uKFByb2plY3QgcHJvamVj dCwNCiAgICAgICAgICAgICBDb2xsZWN0aW9uPFByb2ZpbGU+IGNvbmZpZ3VyZWRQcm9maWxlcykg ew0KICAgICAgICAgc3VwZXIoRVhURU5TSU9OLCBwcm9qZWN0KTsNCiAgICAgICAgIExpc3QgYyA9 IHByb2plY3QuZ2V0VXNlckRlZmluZWRNb2RlbExpc3QoKTsNCkBAIC0xMzUsMTEgKzEzNiwxMSBA QA0KICAgICAgICAgfQ0KICAgICAgICAgdXBkYXRlU3RyYXRlZ2llcygpOw0KICAgICB9DQotICAg IA0KKw0KICAgICBwcml2YXRlIHZvaWQgdXBkYXRlU3RyYXRlZ2llcygpIHsNCiAgICAgICAgIGZv ciAoUHJvZmlsZSBwcm9maWxlIDogcHJvZmlsZXMpIHsNCi0gICAgICAgICAgICBhY3RpdmF0ZUZv cm1hdGluZ1N0cmF0ZWd5KHByb2ZpbGUpOyAgICAgICAgICAgICAgICANCi0gICAgICAgICAgICBh Y3RpdmF0ZURlZmF1bHRUeXBlU3RyYXRlZ3kocHJvZmlsZSk7ICAgICAgICAgICAgICAgIA0KKyAg ICAgICAgICAgIGFjdGl2YXRlRm9ybWF0aW5nU3RyYXRlZ3kocHJvZmlsZSk7DQorICAgICAgICAg ICAgYWN0aXZhdGVEZWZhdWx0VHlwZVN0cmF0ZWd5KHByb2ZpbGUpOw0KICAgICAgICAgfQ0KICAg ICB9DQogDQpAQCAtMTU2LDExICsxNTcsMTEgQEANCiAgICAgcHVibGljIERlZmF1bHRUeXBlU3Ry YXRlZ3kgZ2V0RGVmYXVsdFR5cGVTdHJhdGVneSgpIHsNCiAgICAgICAgIHJldHVybiBkZWZhdWx0 VHlwZVN0cmF0ZWd5Ow0KICAgICB9DQotICAgIA0KKw0KICAgICAvKioNCi0gICAgICogVXBkYXRl cyB0aGUgY3VycmVudCBzdHJhdGVneSB0byB0aGUgc3RyYXRlZ3kgcHJvdmlkZWQgYnkgdGhlIA0K KyAgICAgKiBVcGRhdGVzIHRoZSBjdXJyZW50IHN0cmF0ZWd5IHRvIHRoZSBzdHJhdGVneSBwcm92 aWRlZCBieSB0aGUNCiAgICAgICogcGFzc2VkIHByb2ZpbGUuIFRoZSBwcm9maWxlIHNob3VsZCBo YXZlIGJlZW4gcHJldmlvdXNseSByZWdpc3RlcmVkLg0KLSAgICAgKiANCisgICAgICoNCiAgICAg ICogQHBhcmFtIHByb2ZpbGUgdGhlIHByb2ZpbGUgcHJvdmlkaW5nIHRoZSBjdXJyZW50IGRlZmF1 bHQgdHlwZSBzdHJhdGVneQ0KICAgICAgKi8NCiAgICAgcHVibGljIHZvaWQgYWN0aXZhdGVEZWZh dWx0VHlwZVN0cmF0ZWd5KFByb2ZpbGUgcHJvZmlsZSkgew0KQEAgLTE2OSwxMSArMTcwLDExIEBA DQogICAgICAgICAgICAgdGhpcy5kZWZhdWx0VHlwZVN0cmF0ZWd5ID0gcHJvZmlsZS5nZXREZWZh dWx0VHlwZVN0cmF0ZWd5KCk7DQogICAgICAgICB9DQogICAgIH0NCi0gICAgDQorDQogICAgIC8q Kg0KLSAgICAgKiBVcGRhdGVzIHRoZSBjdXJyZW50IHN0cmF0ZWd5IHRvIHRoZSBzdHJhdGVneSBw cm92aWRlZCBieSB0aGUgDQorICAgICAqIFVwZGF0ZXMgdGhlIGN1cnJlbnQgc3RyYXRlZ3kgdG8g dGhlIHN0cmF0ZWd5IHByb3ZpZGVkIGJ5IHRoZQ0KICAgICAgKiBwYXNzZWQgcHJvZmlsZS4gVGhl IHByb2ZpbGUgc2hvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IHJlZ2lzdGVyZWQuDQotICAgICAq IA0KKyAgICAgKg0KICAgICAgKiBAcGFyYW0gcHJvZmlsZSB0aGUgcHJvZmlsZSBwcm92aWRpbmcg dGhlIGN1cnJlbnQgZm9ybWF0aW5nIHN0cmF0ZWd5DQogICAgICAqLw0KICAgICBwdWJsaWMgdm9p ZCBhY3RpdmF0ZUZvcm1hdGluZ1N0cmF0ZWd5KFByb2ZpbGUgcHJvZmlsZSkgew0KQEAgLTE5Miw3 ICsxOTMsNyBAQA0KIA0KICAgICAvKioNCiAgICAgICogQXBwbGllcyBhIG5ldyBwcm9maWxlIHRv IHRoaXMgY29uZmlndXJhdGlvbi4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBw IHRoZSBwcm9maWxlIHRvIGJlIGFwcGxpZWQNCiAgICAgICogQGRlcHJlY2F0ZWQgZm9yIDAuMjku MiwgYmVjYXVzZSBzaW5jZSBVTUwyIGEgcHJvZmlsZSBtdXN0IGJlIGFwcGxpZWQgdG8NCiAgICAg ICogYSBtb2RlbA0KQEAgLTIwNSw3ICsyMDYsNyBAQA0KICAgICAvKioNCiAgICAgICogQXBwbGll cyBhIG5ldyBwcm9maWxlIHRvIHRoaXMgY29uZmlndXJhdGlvbiBhbmQgdG8gdGhlIGdpdmVuIG1v ZGVsIChvcg0KICAgICAgKiBvdGhlciBwcm9maWxlLCB3aGljaCBjb3VsZCBiZSBsYXRlciBhIGNv bGxlY3Rpb24pLg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIHAgdGhlIHByb2Zp bGUgdG8gYmUgYXBwbGllZA0KICAgICAgKiBAcGFyYW0gbSB0aGUgbW9kZWwgKG9yIHByb2ZpbGUp IHRvIHdoaWNoIHRoZSBwcm9maWxlIHdpbGwgYmUgYXBwbGllZA0KICAgICAgKi8NCkBAIC0yMjAs OSArMjIxLDExIEBADQogICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgcHJvZmls ZU1vZGVscy5hZGRBbGwocC5nZXRQcm9maWxlUGFja2FnZXMoKSk7DQogICAgICAgICAgICAgfSBj YXRjaCAoUHJvZmlsZUV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgICAgIExPRy53YXJuKCJF cnJvciByZXRyaWV2aW5nIHByb2ZpbGUncyAiICsgcCArICIgcGFja2FnZXMuIiwgZSk7DQorICAg ICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuV0FSTklORywNCisgICAgICAgICAgICAgICAgICAg ICAgICAiRXJyb3IgcmV0cmlldmluZyBwcm9maWxlJ3MgIiArIHAgKyAiIHBhY2thZ2VzLiIsDQor ICAgICAgICAgICAgICAgICAgICAgICAgZSk7DQogICAgICAgICAgICAgfQ0KLSAgICAgICAgICAg IA0KKw0KICAgICAgICAgICAgIEZpZ05vZGVTdHJhdGVneSBmbnMgPSBwLmdldEZpZ3VyZVN0cmF0 ZWd5KCk7DQogICAgICAgICAgICAgaWYgKGZucyAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAg IGZpZ05vZGVTdHJhdGVnaWVzLmFkZChmbnMpOw0KQEAgLTIzOCw3ICsyNDEsNyBAQA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAicHJvZmlsZSIsIG51bGwsIHApKSk7DQogICAgICAgICB9 DQogICAgIH0NCi0gICAgICAgIA0KKw0KICAgICAvKioNCiAgICAgICogQHJldHVybiB0aGUgbGlz dCBvZiBtb2RlbHMgb2YgdGhlIGN1cnJlbnRseSBhcHBsaWVkIHByb2ZpbGUuDQogICAgICAqLw0K QEAgLTI0OCw3ICsyNTEsNyBAQA0KIA0KICAgICAvKioNCiAgICAgICogUmVtb3ZlcyB0aGUgcGFz c2VkIHByb2ZpbGUgZnJvbSB0aGlzIGNvbmZpZ3VyYXRpb24uDQotICAgICAqIA0KKyAgICAgKg0K ICAgICAgKiBAcGFyYW0gcCB0aGUgcHJvZmlsZSB0byBiZSBhcHBsaWVkDQogICAgICAqIEBkZXBy ZWNhdGVkIGZvciAwLjI5LjIsIGJlY2F1c2Ugc2luY2UgVU1MMiBhIHByb2ZpbGUgbXVzdCBiZSB1 bmFwcGxpZWQNCiAgICAgICogZnJvbSBhIG1vZGVsDQpAQCAtMjYxLDcgKzI2NCw3IEBADQogICAg IC8qKg0KICAgICAgKiBSZW1vdmVzIHRoZSBwYXNzZWQgcHJvZmlsZSBmcm9tIHRoZSBjb25maWd1 cmF0aW9uIGFuZCB1bmFwcGxpZXMgaXQgZnJvbQ0KICAgICAgKiB0aGUgZ2l2ZW4gbW9kZWwgKG9y IG90aGVyIHByb2ZpbGUsIHdoaWNoIGNvdWxkIGJlIGxhdGVyIGEgY29sbGVjdGlvbikuDQotICAg ICAqIA0KKyAgICAgKg0KICAgICAgKiBAcGFyYW0gcCB0aGUgcHJvZmlsZSB0byBiZSByZW1vdmVk L3VuYXBwbGllZA0KICAgICAgKiBAcGFyYW0gbSB0aGUgbW9kZWwgKG9yIHByb2ZpbGUpIHRvIHdo aWNoIHRoZSBwcm9maWxlIHdpbGwgYmUgdW5hcHBsaWVkDQogICAgICAqLw0KQEAgLTI3Myw3ICsy NzYsNyBAQA0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBwcm9maWxlTW9kZWxzLnJlbW92 ZUFsbChwLmdldFByb2ZpbGVQYWNrYWdlcygpKTsNCiAgICAgICAgIH0gY2F0Y2ggKFByb2ZpbGVF eGNlcHRpb24gZSkgew0KLSAgICAgICAgICAgIExPRy5lcnJvcigiRXhjZXB0aW9uIiwgZSk7DQor ICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsICJFeGNlcHRpb24iLCBlKTsNCiAgICAg ICAgIH0NCiANCiAgICAgICAgIEZpZ05vZGVTdHJhdGVneSBmbnMgPSBwLmdldEZpZ3VyZVN0cmF0 ZWd5KCk7DQpAQCAtMzAxLDcgKzMwNCw3IEBADQogICAgICAgICAgICAgICAgIEFyZ29FdmVudFR5 cGVzLlBST0ZJTEVfUkVNT1ZFRCwgbmV3IFByb3BlcnR5Q2hhbmdlRXZlbnQodGhpcywNCiAgICAg ICAgICAgICAgICAgICAgICAgICAicHJvZmlsZSIsIHAsIG51bGwpKSk7DQogICAgIH0NCi0gICAg DQorDQogICAgIHByaXZhdGUgRmlnTm9kZVN0cmF0ZWd5IGNvbXBvc2l0ZUZpZ05vZGVTdHJhdGVn eSA9IG5ldyBGaWdOb2RlU3RyYXRlZ3koKSB7DQogDQogCXB1YmxpYyBJbWFnZSBnZXRJY29uRm9y U3RlcmVvdHlwZShPYmplY3QgZWxlbWVudCkgew0KQEAgLTMxNywxNCArMzIwLDE0IEBADQogCSAg ICB9DQogCSAgICByZXR1cm4gbnVsbDsNCiAJfQ0KLQkNCisNCiAgICAgfTsNCi0gICAgDQorDQog ICAgIC8qKg0KICAgICAgKiBAcmV0dXJuIHRoZSBjdXJyZW50IEZpZ05vZGVTdHJhdGVneQ0KICAg ICAgKi8NCiAgICAgcHVibGljIEZpZ05vZGVTdHJhdGVneSBnZXRGaWdOb2RlU3RyYXRlZ3koKSB7 DQotCXJldHVybiBjb21wb3NpdGVGaWdOb2RlU3RyYXRlZ3k7IA0KKwlyZXR1cm4gY29tcG9zaXRl RmlnTm9kZVN0cmF0ZWd5Ow0KICAgICB9DQogDQogICAgIC8qKg0KQEAgLTMzNiw5ICszMzksOSBA QA0KICAgICB9DQogDQogICAgIC8qKg0KLSAgICAgKiBPYmplY3RzIG9mIHRoaXMgY2xhc3MgYXJl IGFsd2F5cyBjb25zaXN0ZW50LCB0aGVyZSdzIG5vIG5lZWQgDQorICAgICAqIE9iamVjdHMgb2Yg dGhpcyBjbGFzcyBhcmUgYWx3YXlzIGNvbnNpc3RlbnQsIHRoZXJlJ3Mgbm8gbmVlZA0KICAgICAg KiB0byByZXBhaXIgdGhlbS4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEByZXR1cm4gdGhl IGVtcHR5IHN0cmluZy4NCiAgICAgICogQHNlZSBvcmcuYXJnb3VtbC5rZXJuZWwuUHJvamVjdE1l bWJlciNyZXBhaXIoKQ0KICAgICAgKi8NCkBAIC0zNTcsMTYgKzM2MCwxNiBAQA0KIA0KIA0KICAg ICAvKioNCi0gICAgICogRmluZCBhIHN0ZXJlb3R5cGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSB3aGlj aCBpcyBhcHBsaWNhYmxlIHRvIHRoZSBnaXZlbiANCisgICAgICogRmluZCBhIHN0ZXJlb3R5cGUg d2l0aCB0aGUgZ2l2ZW4gbmFtZSB3aGljaCBpcyBhcHBsaWNhYmxlIHRvIHRoZSBnaXZlbg0KICAg ICAgKiBlbGVtZW50Lg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIG5hbWUgbmFt ZSBvZiBzdGVyZW90eXBlIHRvIGxvb2sgZm9yDQogICAgICAqIEBwYXJhbSBlbGVtZW50IG1vZGVs IGVsZW1lbnQgdG8gd2hpY2ggdGhlIHN0ZXJlb3R5cGUgbXVzdCBiZSBhcHBsaWNhYmxlDQogICAg ICAqIEByZXR1cm4gdGhlIHN0ZXJlb3R5cGUgb3IgbnVsbCBpZiBub25lIGZvdW5kDQogICAgICAq Lw0KICAgICBwdWJsaWMgT2JqZWN0IGZpbmRTdGVyZW90eXBlRm9yT2JqZWN0KFN0cmluZyBuYW1l LCBPYmplY3QgZWxlbWVudCkgew0KICAgICAgICAgSXRlcmF0b3IgaXRlciA9IG51bGw7DQotICAg ICAgICANCisNCiAgICAgICAgIGZvciAoT2JqZWN0IG1vZGVsIDogcHJvZmlsZU1vZGVscykgew0K ICAgICAgICAgICAgIGl0ZXIgPSBNb2RlbC5nZXRGYWNhZGUoKS5nZXRPd25lZEVsZW1lbnRzKG1v ZGVsKS5pdGVyYXRvcigpOw0KIA0KQEAgLTM4OSw3ICszOTIsNyBAQA0KIA0KICAgICAvKioNCiAg ICAgICogU2VhcmNoIGZvciB0aGUgZ2l2ZW4gdHlwZSBpbiBhbGwgb2YgdGhlIHByb2ZpbGUgbW9k ZWxzLg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIG5hbWUgbmFtZSBvZiB0eXBl IHRvIGJlIGZvdW5kDQogICAgICAqIEByZXR1cm4gdGhlIHR5cGUgb3IgbnVsbA0KICAgICAgKi8N CkBAIC00MDUsMTAgKzQwOCwxMCBAQA0KIA0KICAgICAvKioNCiAgICAgICogRmluZHMgYSB0eXBl IGluIGEgbW9kZWwgYnkgbmFtZQ0KLSAgICAgKiANCi0gICAgICogRklYTUU6IGR1cGxpY2F0ZWQg ZnJvbSB0aGUgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSBpbiANCisgICAgICoNCisgICAgICog RklYTUU6IGR1cGxpY2F0ZWQgZnJvbSB0aGUgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSBpbg0K ICAgICAgKiBvcmcuYXJnb3VtbC5wcm9maWxlLmludGVybmFsLk1vZGVsVXRpbHMuDQotICAgICAq IA0KKyAgICAgKg0KICAgICAgKiBAcGFyYW0gcyB0aGUgdHlwZSBuYW1lDQogICAgICAqIEBwYXJh bSBtb2RlbCB0aGUgbW9kZWwNCiAgICAgICogQHJldHVybiB0aGUgdHlwZSBvciA8Y29kZT5udWxs PC9jb2RlPiBpZiB0aGUgdHlwZSBoYXMgbm90IGJlZW4gZm91bmQuDQpAQCAtNDQzLDExICs0NDYs MTEgQEANCiAgICAgfQ0KIA0KICAgICAvKioNCi0gICAgICogRmluZCBhbGwgdGhlIG1vZGVsIGVs ZW1lbnRzIGluIHRoZSBjb25maWd1cmVkIHtAbGluayBQcm9maWxlfXMgDQorICAgICAqIEZpbmQg YWxsIHRoZSBtb2RlbCBlbGVtZW50cyBpbiB0aGUgY29uZmlndXJlZCB7QGxpbmsgUHJvZmlsZX1z DQogICAgICAqIG9mIHRoZSBnaXZlbiBtZXRhIHR5cGUuDQotICAgICAqIA0KKyAgICAgKg0KICAg ICAgKiBAcGFyYW0gbWV0YVR5cGUgdGhlIG1ldGEgdHlwZSBvZiB0aGUgbW9kZWwgZWxlbWVudHMg dG8gZmluZA0KLSAgICAgKiBAcmV0dXJuIGEge0BsaW5rIENvbGxlY3Rpb259IGNvbnRhaW5pbmcg dGhlIG1vZGVsIGVsZW1lbnRzIHRoYXQgDQorICAgICAqIEByZXR1cm4gYSB7QGxpbmsgQ29sbGVj dGlvbn0gY29udGFpbmluZyB0aGUgbW9kZWwgZWxlbWVudHMgdGhhdA0KICAgICAgKiAgICAgICAg IGFyZSBvZiB0aGUgZ2l2ZW4gbWV0YSB0eXBlDQogICAgICAqLw0KICAgICBAU3VwcHJlc3NXYXJu aW5ncygidW5jaGVja2VkIikNCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMv b3JnL2FyZ291bWwva2VybmVsL1Byb2plY3QuamF2YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50aWdy aXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29y Zy9hcmdvdW1sL2tlcm5lbC9Qcm9qZWN0LmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9 MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdv dW1sLWFwcC9zcmMvb3JnL2FyZ291bWwva2VybmVsL1Byb2plY3QuamF2YQkob3JpZ2luYWwpDQor KysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9rZXJuZWwvUHJvamVjdC5q YXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQogLyogJElkJA0K ICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDEwIENvbnRyaWJ1 dG9ycyAtIHNlZSBiZWxvdw0KKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDEyIENvbnRyaWJ1dG9y cyAtIHNlZSBiZWxvdw0KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQg dGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAgKiB3aGljaCBh Y2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KQEAgLTY2 OCw0ICs2NjgsNCBAQA0KICAgICAgKi8NCiAgICAgcHVibGljIHZvaWQgc2V0RGlydHkoYm9vbGVh biBpc0RpcnR5KTsNCiANCi19DQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUNCit9DQoNCk1v ZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2tlcm5lbC9Qcm9q ZWN0SW1wbC5qYXZhDQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dz ZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwva2VybmVsL1By b2plY3RJbXBsLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3Jn L2FyZ291bWwva2VybmVsL1Byb2plY3RJbXBsLmphdmEJKG9yaWdpbmFsKQ0KKysrIHRydW5rL3Ny Yy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwva2VybmVsL1Byb2plY3RJbXBsLmphdmEJMjAx Mi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMSw2ICsxLDYgQEANCiAvKiAkSWQkDQogICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgQ29udHJpYnV0b3JzIC0g c2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTIgQ29udHJpYnV0b3JzIC0gc2Vl IGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNj b21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFu aWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNTYsMTUgKzU2 LDE2IEBADQogaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KIGltcG9ydCBqYXZhLnV0aWwuTWFwOw0K IGltcG9ydCBqYXZhLnV0aWwuU2V0Ow0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsN CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KIA0KLWltcG9ydCBvcmcuYXBhY2hl LmxvZzRqLkxvZ2dlcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwuYXBwbGljYXRpb24uYXBpLkFyZ287 DQogaW1wb3J0IG9yZy5hcmdvdW1sLmFwcGxpY2F0aW9uLmhlbHBlcnMuQXBwbGljYXRpb25WZXJz aW9uOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5jb25maWd1cmF0aW9uLkNvbmZpZ3VyYXRpb247DQog aW1wb3J0IG9yZy5hcmdvdW1sLmkxOG4uVHJhbnNsYXRvcjsNCitpbXBvcnQgb3JnLmFyZ291bWwu bW9kZWwuRGVmYXVsdHM7DQogaW1wb3J0IG9yZy5hcmdvdW1sLm1vZGVsLkludmFsaWRFbGVtZW50 RXhjZXB0aW9uOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5tb2RlbC5Nb2RlbDsNCi1pbXBvcnQgb3Jn LmFyZ291bWwubW9kZWwuRGVmYXVsdHM7DQogaW1wb3J0IG9yZy5hcmdvdW1sLnByb2ZpbGUuUHJv ZmlsZTsNCiBpbXBvcnQgb3JnLmFyZ291bWwucHJvZmlsZS5Qcm9maWxlRmFjYWRlOw0KIGltcG9y dCBvcmcuYXJnb3VtbC51aS50YXJnZXRtYW5hZ2VyLlRhcmdldE1hbmFnZXI7DQpAQCAtODUsNyAr ODYsOCBAQA0KICAqLw0KIHB1YmxpYyBjbGFzcyBQcm9qZWN0SW1wbCBpbXBsZW1lbnRzIGphdmEu aW8uU2VyaWFsaXphYmxlLCBQcm9qZWN0IHsNCiANCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg TG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoUHJvamVjdEltcGwuY2xhc3MpOw0KKyAgICBw cml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCisgICAgICAgIExvZ2dlci5nZXRMb2dn ZXIoUHJvamVjdEltcGwuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgLyoqDQogICAgICAqIERl ZmF1bHQgbmFtZSBmb3IgYSBwcm9qZWN0Lg0KQEAgLTEzNSw3ICsxMzcsNyBAQA0KICAgICAgKiBJ bnN0YW5jZXMgb2YgdGhlIFVNTCBtb2RlbC4NCiAgICAgICovDQogICAgIHByaXZhdGUgZmluYWwg TGlzdCBtb2RlbHMgPSBuZXcgQXJyYXlMaXN0KCk7DQotICAgIA0KKw0KICAgICBwcml2YXRlIE9i amVjdCByb290Ow0KICAgICBwcml2YXRlIGZpbmFsIENvbGxlY3Rpb24gcm9vdHMgPSBuZXcgSGFz aFNldCgpOw0KIA0KQEAgLTE0Myw3ICsxNDUsNyBAQA0KICAgICAgKiBJbnN0YW5jZXMgb2YgdGhl IFVNTCBkaWFncmFtcy4NCiAgICAgICovDQogICAgIHByaXZhdGUgZmluYWwgTGlzdDxBcmdvRGlh Z3JhbT4gZGlhZ3JhbXMgPSBuZXcgQXJyYXlMaXN0PEFyZ29EaWFncmFtPigpOw0KLSAgICANCisN CiAgICAgcHJpdmF0ZSBPYmplY3QgY3VycmVudE5hbWVzcGFjZTsNCiAgICAgcHJpdmF0ZSBNYXA8 U3RyaW5nLCBPYmplY3Q+IHV1aWRSZWZzOw0KICAgICBwcml2YXRlIHRyYW5zaWVudCBWZXRvYWJs ZUNoYW5nZVN1cHBvcnQgdmV0b1N1cHBvcnQ7DQpAQCAtMTU0LDE0ICsxNTYsMTQgQEANCiAgICAg ICogVGhlIGFjdGl2ZSBkaWFncmFtLCBwb2ludGVyIHRvIGEgZGlhZ3JhbSBpbiB0aGUgbGlzdCB3 aXRoIGRpYWdyYW1zLg0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSBBcmdvRGlhZ3JhbSBhY3RpdmVE aWFncmFtOw0KLSAgICANCisNCiAgICAgLyoqIFRoZSBuYW1lIG9mIHRoZSBkaWFncmFtIHRvIHNo b3cgYnkgZGVmYXVsdCBhZnRlciBsb2FkaW5nIGEgcHJvamVjdC4gKi8NCiAgICAgcHJpdmF0ZSBT dHJpbmcgc2F2ZWREaWFncmFtTmFtZTsNCiANCiAgICAgLyoqDQogICAgICAqIENhY2hlIGZvciB0 aGUgZGVmYXVsdCBtb2RlbC4NCiAgICAgICovDQotICAgIHByaXZhdGUgSGFzaE1hcDxTdHJpbmcs IE9iamVjdD4gZGVmYXVsdE1vZGVsVHlwZUNhY2hlID0gDQorICAgIHByaXZhdGUgSGFzaE1hcDxT dHJpbmcsIE9iamVjdD4gZGVmYXVsdE1vZGVsVHlwZUNhY2hlID0NCiAgICAgICAgIG5ldyBIYXNo TWFwPFN0cmluZywgT2JqZWN0PigpOw0KIA0KICAgICBwcml2YXRlIGZpbmFsIENvbGxlY3Rpb24g dHJhc2hjYW4gPSBuZXcgQXJyYXlMaXN0KCk7DQpAQCAtMTcxLDcgKzE3Myw3IEBADQogICAgIHBy aXZhdGUgVW5kb01hbmFnZXIgdW5kb01hbmFnZXIgPSBuZXcgRGVmYXVsdFVuZG9NYW5hZ2VyKHRo aXMpOw0KIA0KICAgICBwcml2YXRlIGJvb2xlYW4gZGlydHkgPSBmYWxzZTsNCi0gICAgDQorDQog ICAgIC8qKg0KICAgICAgKiBDb25zdHJ1Y3Rvci4NCiAgICAgICoNCkBAIC0yMTAsNyArMjEyLDcg QEANCiANCiAgICAgICAgIGhpc3RvcnlGaWxlID0gIiI7DQogDQotICAgICAgICBMT0cuaW5mbygi bWFraW5nIGVtcHR5IHByb2plY3Qgd2l0aCBlbXB0eSBtb2RlbCIpOw0KKyAgICAgICAgTE9HLmxv ZyhMZXZlbC5JTkZPLCAibWFraW5nIGVtcHR5IHByb2plY3Qgd2l0aCBlbXB0eSBtb2RlbCIpOw0K ICAgICAgICAgYWRkU2VhcmNoUGF0aCgiUFJPSkVDVF9ESVIiKTsNCiAgICAgfQ0KIA0KQEAgLTIy Niw3ICsyMjgsNyBAQA0KICAgICBwdWJsaWMgaW50IGdldFByb2plY3RUeXBlKCkgew0KICAgICAg ICAgcmV0dXJuIHByb2plY3RUeXBlOw0KICAgICB9DQotICAgIA0KKw0KICAgICBwdWJsaWMgdm9p ZCBzZXRQcm9qZWN0VHlwZShpbnQgcHJvamVjdFR5cGUpIHsNCiAgICAgICAgIHRoaXMucHJvamVj dFR5cGUgPSBwcm9qZWN0VHlwZTsNCiAgICAgfQ0KQEAgLTI0NCwyMyArMjQ2LDE5IEBADQogICAg ICAqIEBwYXJhbSB0aGVVcmkgdGhlIFVSSSBmb3IgdGhlIHByb2plY3QNCiAgICAgICovDQogICAg IHB1YmxpYyB2b2lkIHNldFVyaShVUkkgdGhlVXJpKSB7DQotICAgICAgICBpZiAoTE9HLmlzRGVi dWdFbmFibGVkKCkpIHsNCi0gICAgICAgICAgICBMT0cuZGVidWcoIlNldHRpbmcgcHJvamVjdCBV UkkgZnJvbSBcIiIgKyB1cmkNCi0gICAgICAgICAgICAgICAgICAgICAgKyAiXCIgdG8gXCIiICsg dGhlVXJpICsgIlwiLiIpOw0KLSAgICAgICAgfQ0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5F LA0KKyAgICAgICAgICAgICAgICAiU2V0dGluZyBwcm9qZWN0IFVSSSBmcm9tIFwiezB9XCIgdG8g XCJ7MX1cIi4iLA0KKyAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117dXJpLCB0aGVVcml9KTsN CisNCiAgICAgICAgIHVyaSA9IHRoZVVyaTsNCiAgICAgfQ0KIA0KICAgICBwdWJsaWMgdm9pZCBz ZXRGaWxlKGZpbmFsIEZpbGUgZmlsZSkgew0KICAgICAgICAgVVJJIHRoZVByb2plY3RVcmkgPSBm aWxlLnRvVVJJKCk7DQogDQotICAgICAgICBpZiAoTE9HLmlzRGVidWdFbmFibGVkKCkpIHsNCi0g ICAgICAgICAgICBMT0cuZGVidWcoIlNldHRpbmcgcHJvamVjdCBmaWxlIG5hbWUgZnJvbSBcIiIN Ci0gICAgICAgICAgICAgICAgICAgICAgKyB1cmkNCi0gICAgICAgICAgICAgICAgICAgICAgKyAi XCIgdG8gXCIiDQotICAgICAgICAgICAgICAgICAgICAgICsgdGhlUHJvamVjdFVyaQ0KLSAgICAg ICAgICAgICAgICAgICAgICArICJcIi4iKTsNCi0gICAgICAgIH0NCisgICAgICAgIExPRy5sb2co TGV2ZWwuRklORSwNCisgICAgICAgICAgICAgICAgIlNldHRpbmcgcHJvamVjdCBmaWxlIG5hbWUg ZnJvbSBcInswfVwiIHRvIFwiezF9XCIuIiwNCisgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtd e3VyaSwgdGhlUHJvamVjdFVyaX0pOw0KIA0KICAgICAgICAgdXJpID0gdGhlUHJvamVjdFVyaTsN CiAgICAgfQ0KQEAgLTI3OSw3ICsyNzcsOCBAQA0KIA0KIA0KICAgICBwdWJsaWMgTGlzdDxQcm9q ZWN0TWVtYmVyPiBnZXRNZW1iZXJzKCkgew0KLSAgICAgICAgTE9HLmluZm8oIkdldHRpbmcgdGhl IG1lbWJlcnMgdGhlcmUgYXJlICIgKyBtZW1iZXJzLnNpemUoKSk7DQorICAgICAgICBMT0cubG9n KExldmVsLklORk8sDQorICAgICAgICAgICAgICAgICJHZXR0aW5nIHRoZSBtZW1iZXJzIHRoZXJl IGFyZSB7MH0iLCBtZW1iZXJzLnNpemUoKSk7DQogICAgICAgICByZXR1cm4gbWVtYmVyczsNCiAg ICAgfQ0KIA0KQEAgLTI5Myw3ICsyOTIsNyBAQA0KICAgICAgICAgICAgIHRyeSB7DQogICAgICAg ICAgICAgICAgIGQuc2V0TmFtZShkLmdldE5hbWUoKSArICIgIiArIHNlcmlhbCk7DQogICAgICAg ICAgICAgfSBjYXRjaCAoUHJvcGVydHlWZXRvRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICAg ICAgc2VyaWFsKys7ICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgIHNlcmlhbCsrOw0KICAg ICAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgICAgIFByb2plY3RNZW1iZXIgcG0gPSBuZXcg UHJvamVjdE1lbWJlckRpYWdyYW0oZCwgdGhpcyk7DQpAQCAtMzA4LDcgKzMwNyw4IEBADQogICAg IHByaXZhdGUgdm9pZCBhZGRUb2RvTWVtYmVyKFByb2plY3RNZW1iZXJUb2RvTGlzdCBwbSkgew0K ICAgICAgICAgLy8gQWRkaW5nIGEgdG9kbyBtZW1iZXIgcmVtb3ZlcyBhbnkgZXhpc3Rpbmcgb25l Lg0KICAgICAgICAgbWVtYmVycy5hZGQocG0pOw0KLSAgICAgICAgTE9HLmluZm8oIkFkZGVkIHRv ZG8gbWVtYmVyLCB0aGVyZSBhcmUgbm93ICIgKyBtZW1iZXJzLnNpemUoKSk7DQorICAgICAgICBM T0cubG9nKExldmVsLklORk8sDQorICAgICAgICAgICAgICAgICJBZGRlZCB0b2RvIG1lbWJlciwg dGhlcmUgYXJlIG5vdyB7MH0iLCBtZW1iZXJzLnNpemUoKSk7DQogICAgIH0NCiANCiANCkBAIC0z MTgsMjMgKzMxOCwyMyBAQA0KICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRF eGNlcHRpb24oDQogICAgICAgICAgICAgICAgICAgICAiQSBtb2RlbCBtZW1iZXIgbXVzdCBiZSBz dXBwbGllZCIpOw0KICAgICAgICAgfSBlbHNlIGlmIChtIGluc3RhbmNlb2YgQXJnb0RpYWdyYW0p IHsNCi0gICAgICAgICAgICBMT0cuaW5mbygiQWRkaW5nIGRpYWdyYW0gbWVtYmVyIik7DQorICAg ICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLCAiQWRkaW5nIGRpYWdyYW0gbWVtYmVyIik7DQog ICAgICAgICAgICAgYWRkRGlhZ3JhbU1lbWJlcigoQXJnb0RpYWdyYW0pIG0pOw0KICAgICAgICAg fSBlbHNlIGlmIChtIGluc3RhbmNlb2YgUHJvamVjdE1lbWJlclRvZG9MaXN0KSB7DQotICAgICAg ICAgICAgTE9HLmluZm8oIkFkZGluZyB0b2RvIG1lbWJlciIpOw0KKyAgICAgICAgICAgIExPRy5s b2coTGV2ZWwuSU5GTywgIkFkZGluZyB0b2RvIG1lbWJlciIpOw0KICAgICAgICAgICAgIGFkZFRv ZG9NZW1iZXIoKFByb2plY3RNZW1iZXJUb2RvTGlzdCkgbSk7DQogICAgICAgICB9IGVsc2UgaWYg KE1vZGVsLmdldEZhY2FkZSgpLmlzQU1vZGVsKG0pKSB7DQotICAgICAgICAgICAgTE9HLmluZm8o IkFkZGluZyBtb2RlbCBtZW1iZXIiKTsNCisgICAgICAgICAgICBMT0cubG9nKExldmVsLklORk8s ICJBZGRpbmcgbW9kZWwgbWVtYmVyIik7DQogICAgICAgICAgICAgYWRkTW9kZWxNZW1iZXIobSk7 DQogICAgICAgICB9IGVsc2UgaWYgKE1vZGVsLmdldEZhY2FkZSgpLmlzQVByb2ZpbGUobSkpIHsN Ci0gICAgICAgICAgICBMT0cuaW5mbygiQWRkaW5nIHByb2ZpbGUgbW9kZWwgbWVtYmVyIik7DQor ICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLCAiQWRkaW5nIHByb2ZpbGUgbW9kZWwgbWVt YmVyIik7DQogICAgICAgICAgICAgYWRkTW9kZWxNZW1iZXIobSk7DQogICAgICAgICB9IGVsc2Ug ew0KICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oDQogICAg ICAgICAgICAgICAgICAgICAiVGhlIG1lbWJlciBtdXN0IGJlIGEgVU1MIG1vZGVsIHRvZG8gbWVt YmVyIG9yIGRpYWdyYW0uIg0KICAgICAgICAgICAgICAgICAgICAgKyAiSXQgaXMgIiArIG0uZ2V0 Q2xhc3MoKS5nZXROYW1lKCkpOw0KICAgICAgICAgfQ0KLSAgICAgICAgTE9HLmluZm8oIlRoZXJl IGFyZSBub3cgIiArIG1lbWJlcnMuc2l6ZSgpICsgIiBtZW1iZXJzIik7DQorICAgICAgICBMT0cu bG9nKExldmVsLklORk8sICJUaGVyZSBhcmUgbm93IHswfSBtZW1iZXJzIiwgbWVtYmVycy5zaXpl KCkpOw0KICAgICB9DQogDQogICAgIC8qKg0KQEAgLTM1OSwxMCArMzU5LDEwIEBADQogICAgICAg ICAgICAgfQ0KICAgICAgICAgICAgIC8vIGdvdCBwYXN0IHRoZSB2ZXRvLCBhZGQgdGhlIG1lbWJl cg0KICAgICAgICAgICAgIFByb2plY3RNZW1iZXIgcG0gPSBuZXcgUHJvamVjdE1lbWJlck1vZGVs KG0sIHRoaXMpOw0KLSAgICAgICAgICAgIExPRy5pbmZvKCJBZGRpbmcgbW9kZWwgbWVtYmVyIHRv IHN0YXJ0IG9mIG1lbWJlciBsaXN0Iik7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZP LCAiQWRkaW5nIG1vZGVsIG1lbWJlciB0byBzdGFydCBvZiBtZW1iZXIgbGlzdCIpOw0KICAgICAg ICAgICAgIG1lbWJlcnMuYWRkKHBtKTsNCiAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAg TE9HLmluZm8oIkF0dGVtcHRlZCB0byBsb2FkIDIgbW9kZWxzIik7DQorICAgICAgICAgICAgTE9H LmxvZyhMZXZlbC5JTkZPLCAiQXR0ZW1wdGVkIHRvIGxvYWQgMiBtb2RlbHMiKTsNCiAgICAgICAg ICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKA0KICAgICAgICAgICAgICAg ICAgICAgIkF0dGVtcHRlZCB0byBsb2FkIDIgbW9kZWxzIik7DQogICAgICAgICB9DQpAQCAtMzc3 LDcgKzM3Nyw3IEBADQogCX0NCiAgICAgICAgIGlmICghbW9kZWxzLmNvbnRhaW5zKG1vZGVsKSkg ew0KICAgICAgICAgICAgIHNldFJvb3QobW9kZWwpOw0KLSAgICAgICAgfSAgICAgICAgDQorICAg ICAgICB9DQogICAgIH0NCiANCiAgICAgcHJpdmF0ZSB2b2lkIGFkZE1vZGVsSW50ZXJuYWwoZmlu YWwgT2JqZWN0IG1vZGVsKSB7DQpAQCAtMzg2LDcgKzM4Niw3IEBADQogICAgICAgICBzZXRDdXJy ZW50TmFtZXNwYWNlKG1vZGVsKTsNCiAgICAgICAgIHNldFNhdmVFbmFibGVkKHRydWUpOw0KICAg ICAgICAgaWYgKG1vZGVscy5zaXplKCkgPiAxIHx8IHJvb3RzLnNpemUoKSA+IDEpIHsNCi0gICAg ICAgICAgICBMT0cuZGVidWcoIk11bHRpcGxlIHJvb3RzL21vZGVscyIpOw0KKyAgICAgICAgICAg IExPRy5sb2coTGV2ZWwuRklORSwgIk11bHRpcGxlIHJvb3RzL21vZGVscyIpOw0KICAgICAgICAg fQ0KICAgICB9DQogDQpAQCAtMzk2LDEyICszOTYsMTMgQEANCiAgICAgICovDQogICAgIHByb3Rl Y3RlZCB2b2lkIHJlbW92ZVByb2plY3RNZW1iZXJEaWFncmFtKEFyZ29EaWFncmFtIGQpIHsNCiAg ICAgICAgIGlmIChhY3RpdmVEaWFncmFtID09IGQpIHsNCi0gICAgICAgICAgICBMT0cuZGVidWco IkRlbGV0aW5nIGFjdGl2ZSBkaWFncmFtICIgKyBkKTsNCisgICAgICAgICAgICBMT0cubG9nKExl dmVsLkZJTkUsICJEZWxldGluZyBhY3RpdmUgZGlhZ3JhbSB7MH0iLCBkKTsNCiAgICAgICAgICAg ICBBcmdvRGlhZ3JhbSBkZWZhdWx0RGlhZ3JhbSA9IG51bGw7DQogICAgICAgICAgICAgaWYgKGRp YWdyYW1zLnNpemUoKSA9PSAxKSB7DQogICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGRlbGV0aW5n IHRoZSBsYXN0IGRpYWdyYW0gc28gbGV0cyBjcmVhdGUgYSBuZXcgb25lDQogICAgICAgICAgICAg ICAgIC8vIFRPRE86IE9uY2Ugd2UgZ28gTURJIHdlIHdvbid0IG5lZWQgdGhpcy4NCi0gICAgICAg ICAgICAgICAgTE9HLmRlYnVnKCJEZWxldGluZyBsYXN0IGRpYWdyYW0gLSBjcmVhdGluZyBuZXcg ZGVmYXVsdCBkaWFnIik7DQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwNCisg ICAgICAgICAgICAgICAgICAgICAgICAiRGVsZXRpbmcgbGFzdCBkaWFncmFtIC0gY3JlYXRpbmcg bmV3IGRlZmF1bHQgZGlhZyIpOw0KICAgICAgICAgICAgICAgICBPYmplY3QgcHJvamVjdFJvb3Qg PSBnZXRSb290KCk7DQogICAgICAgICAgICAgICAgIGlmICghTW9kZWwuZ2V0VW1sRmFjdG9yeSgp LmlzUmVtb3ZlZChwcm9qZWN0Um9vdCkpIHsNCiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRE aWFncmFtID0gRGlhZ3JhbUZhY3RvcnkuZ2V0SW5zdGFuY2UoKQ0KQEAgLTQxMiwxNSArNDEzLDE3 IEBADQogICAgICAgICAgICAgICAgIC8vIE1ha2UgdGhlIHRvcG1vc3QgZGlhZ3JhbSAodGhhdCBp cyBub3QgdGhlIG9uZSBiZWluZyBkZWxldGVkKQ0KICAgICAgICAgICAgICAgICAvLyBjdXJyZW50 Lg0KICAgICAgICAgICAgICAgICBkZWZhdWx0RGlhZ3JhbSA9IGRpYWdyYW1zLmdldCgwKTsNCi0g ICAgICAgICAgICAgICAgTE9HLmRlYnVnKCJDYW5kaWRhdGUgZGVmYXVsdCBkaWFncmFtIGlzICIg KyBkZWZhdWx0RGlhZ3JhbSk7DQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwN CisgICAgICAgICAgICAgICAgICAgICAgICAiQ2FuZGlkYXRlIGRlZmF1bHQgZGlhZ3JhbSBpcyB7 MH0iLCBkZWZhdWx0RGlhZ3JhbSk7DQogICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0RGlhZ3Jh bSA9PSBkKSB7DQogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RGlhZ3JhbSA9IGRpYWdyYW1z LmdldCgxKTsNCi0gICAgICAgICAgICAgICAgICAgIExPRy5kZWJ1ZygiU3dpdGNoaW5nIGRlZmF1 bHQgZGlhZ3JhbSB0byAiICsgZGVmYXVsdERpYWdyYW0pOw0KKyAgICAgICAgICAgICAgICAgICAg TE9HLmxvZyhMZXZlbC5GSU5FLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3dpdGNo aW5nIGRlZmF1bHQgZGlhZ3JhbSB0byB7MH0iLCBkZWZhdWx0RGlhZ3JhbSk7DQogICAgICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgYWN0aXZlRGlhZ3JhbSA9IGRl ZmF1bHREaWFncmFtOw0KICAgICAgICAgICAgIFRhcmdldE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5z ZXRUYXJnZXQoYWN0aXZlRGlhZ3JhbSk7DQotICAgICAgICAgICAgTE9HLmRlYnVnKCJOZXcgYWN0 aXZlIGRpYWdyYW0gaXMgIiArIGRlZmF1bHREaWFncmFtKTsNCisgICAgICAgICAgICBMT0cubG9n KExldmVsLkZJTkUsICJOZXcgYWN0aXZlIGRpYWdyYW0gaXMgezB9IiwgZGVmYXVsdERpYWdyYW0p Ow0KICAgICAgICAgfQ0KIA0KICAgICAgICAgcmVtb3ZlRGlhZ3JhbShkKTsNCkBAIC00MjgsNyAr NDMxLDcgQEANCiAgICAgICAgIGQucmVtb3ZlKCk7DQogICAgICAgICBzZXRTYXZlRW5hYmxlZCh0 cnVlKTsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIEVuYWJsZXMgdGhlIHNh dmUgYWN0aW9uIGlmIHRoaXMgcHJvamVjdCBpcyB0aGUgY3VycmVudCBwcm9qZWN0DQogICAgICAq IEBwYXJhbSBlbmFibGUgdHJ1ZSB0byBlbmFibGUNCkBAIC01MzYsNyArNTM5LDggQEANCiAgICAg ICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICByZXN1bHQuYWRkQWxsKHByb2ZpbGUuZ2V0 UHJvZmlsZVBhY2thZ2VzKCkpOw0KICAgICAgICAgICAgIH0gY2F0Y2ggKG9yZy5hcmdvdW1sLnBy b2ZpbGUuUHJvZmlsZUV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgICAgIExPRy5lcnJvcigi RXhjZXB0aW9uIHdoZW4gZmV0Y2hpbmcgbW9kZWxzIGZyb20gcHJvZmlsZSAiDQorICAgICAgICAg ICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICJF eGNlcHRpb24gd2hlbiBmZXRjaGluZyBtb2RlbHMgZnJvbSBwcm9maWxlICINCiAgICAgICAgICAg ICAgICAgICAgICAgICArIHByb2ZpbGUuZ2V0RGlzcGxheU5hbWUoKSwgZSk7DQogICAgICAgICAg ICAgfQ0KICAgICAgICAgfQ0KQEAgLTU0OSw3ICs1NTMsNyBAQA0KICAgICAgKiBJZiB0aGVyZSBp c24ndCBleGFjdGx5IG9uZSBtb2RlbCwgPGNvZGU+bnVsbDwvY29kZT4gaXMgcmV0dXJuZWQuDQog ICAgICAqDQogICAgICAqIEByZXR1cm4gdGhlIG1vZGVsLg0KLSAgICAgKiBAZGVwcmVjYXRlZCBm b3IgMC4yNS40IGJ5IHRmbW9ycmlzLiAgVXNlIA0KKyAgICAgKiBAZGVwcmVjYXRlZCBmb3IgMC4y NS40IGJ5IHRmbW9ycmlzLiAgVXNlDQogICAgICAqIHtAbGluayAjZ2V0VXNlckRlZmluZWRNb2Rl bExpc3QoKX0gb3Ige0BsaW5rICNnZXRNb2RlbHMoKX0uDQogICAgICAqIEBzZWUgb3JnLmFyZ291 bWwua2VybmVsLlByb2plY3QjZ2V0TW9kZWwoKQ0KICAgICAgKi8NCkBAIC02MTcsNyArNjIxLDcg QEANCiAgICAgICAgIH0NCiAgICAgICAgIHJldHVybiBudWxsOw0KICAgICB9DQotICAgIA0KKw0K IA0KICAgICBwdWJsaWMgT2JqZWN0IGdldERlZmF1bHRSZXR1cm5UeXBlKCkgew0KICAgICAgICAg aWYgKHByb2ZpbGVDb25maWd1cmF0aW9uLmdldERlZmF1bHRUeXBlU3RyYXRlZ3koKSAhPSBudWxs KSB7DQpAQCAtNjQ1LDcgKzY0OSw3IEBADQogICAgICAgICBjbHMgPSBmaW5kVHlwZUluRGVmYXVs dE1vZGVsKHMpOw0KIA0KICAgICAgICAgaWYgKGNscyA9PSBudWxsICYmIGRlZmluZU5ldykgew0K LSAgICAgICAgICAgIExPRy5kZWJ1ZygibmV3IFR5cGUgZGVmaW5lZCEiKTsNCisgICAgICAgICAg ICBMT0cubG9nKExldmVsLkZJTkUsICJuZXcgVHlwZSBkZWZpbmVkISIpOw0KICAgICAgICAgICAg IGNscyA9DQogICAgICAgICAgICAgICAgIE1vZGVsLmdldENvcmVGYWN0b3J5KCkuYnVpbGRDbGFz cyhnZXRDdXJyZW50TmFtZXNwYWNlKCkpOw0KICAgICAgICAgICAgIE1vZGVsLmdldENvcmVIZWxw ZXIoKS5zZXROYW1lKGNscywgcyk7DQpAQCAtODA2LDggKzgxMCw4IEBADQogDQogICAgIHB1Ymxp YyBPYmplY3QgZ2V0SW5pdGlhbFRhcmdldCgpIHsNCiAgICAgICAgIGlmIChzYXZlZERpYWdyYW1O YW1lICE9IG51bGwpIHsNCi0gICAgICAgICAgICAvKiBIZW5jZSwgYSBkaWFncmFtIG5hbWUgd2Fz IHNhdmVkIGluIHRoZSBwcm9qZWN0IA0KLSAgICAgICAgICAgICAqIHRoYXQgd2UgYXJlIGxvYWRp bmcuIFNvLCB3ZSB1c2UgdGhpcyBuYW1lIA0KKyAgICAgICAgICAgIC8qIEhlbmNlLCBhIGRpYWdy YW0gbmFtZSB3YXMgc2F2ZWQgaW4gdGhlIHByb2plY3QNCisgICAgICAgICAgICAgKiB0aGF0IHdl IGFyZSBsb2FkaW5nLiBTbywgd2UgdXNlIHRoaXMgbmFtZQ0KICAgICAgICAgICAgICAqIHRvIHJl dHJpZXZlIGFueSBtYXRjaGluZyBkaWFncmFtLiAqLw0KICAgICAgICAgICAgIHJldHVybiBnZXRE aWFncmFtKHNhdmVkRGlhZ3JhbU5hbWUpOw0KICAgICAgICAgfQ0KQEAgLTgxNiw3ICs4MjAsNyBA QA0KICAgICAgICAgICAgIHJldHVybiBkaWFncmFtcy5nZXQoMCk7DQogICAgICAgICB9DQogICAg ICAgICBpZiAobW9kZWxzLnNpemUoKSA+IDApIHsNCi0gICAgICAgICAgICAvKiBJZiB0aGVyZSB3 YXMgbm8gZGlhZ3JhbSBhdCBhbGwsIA0KKyAgICAgICAgICAgIC8qIElmIHRoZXJlIHdhcyBubyBk aWFncmFtIGF0IGFsbCwNCiAgICAgICAgICAgICAgKiB0aGVuIHVzZSB0aGUgKGZpcnN0KSBVTUwg bW9kZWwuICovDQogICAgICAgICAgICAgcmV0dXJuIG1vZGVscy5pdGVyYXRvcigpLm5leHQoKTsN CiAgICAgICAgIH0NCkBAIC04NDIsMTMgKzg0NiwxNCBAQA0KICAgICAgICAgICAgIGRpYWdyYW0u cG9zdExvYWQoKTsNCiAgICAgICAgIH0NCiAgICAgICAgIGxvbmcgZW5kVGltZSA9IFN5c3RlbS5j dXJyZW50VGltZU1pbGxpcygpOw0KLSAgICAgICAgTE9HLmRlYnVnKCJEaWFncmFtIHBvc3QgbG9h ZCB0b29rICIgKyAoZW5kVGltZSAtIHN0YXJ0VGltZSkgKyAiIG1zZWMuIik7DQotICAgICAgICAN CisgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwNCisgICAgICAgICAgICAgICAgIkRpYWdyYW0g cG9zdCBsb2FkIHRvb2sgezB9IG1zZWMuIiwgKGVuZFRpbWUgLSBzdGFydFRpbWUpKTsNCisNCiAg ICAgICAgIC8vIGlzc3VlIDE3MjU6IHRoZSByb290IGlzIG5vdCBzZXQsIHdoaWNoIGxlYWRzIHRv IHByb2JsZW1zDQogICAgICAgICAvLyB3aXRoIGRpc3BsYXlpbmcgcHJvcCBwYW5lbHMNCiAgICAg ICAgIE9iamVjdCBtb2RlbCA9IGdldE1vZGVsKCk7DQogDQotICAgICAgICBMT0cuaW5mbygiU2V0 dGluZyByb290IG1vZGVsIHRvICIgKyBtb2RlbCk7DQorICAgICAgICBMT0cubG9nKExldmVsLklO Rk8sICJTZXR0aW5nIHJvb3QgbW9kZWwgdG8gezB9IiwgbW9kZWwpOw0KIA0KICAgICAgICAgc2V0 Um9vdChtb2RlbCk7DQogDQpAQCAtOTIyLDE1ICs5MjcsMTcgQEANCiAgICAgICAgICAgICAoKEZp Zykgb2JqKS5kZWxldGVGcm9tTW9kZWwoKTsNCiAgICAgICAgICAgICAvLyBJZiB3ZSBkZWxldGUg YSBGaWdFZGdlDQogICAgICAgICAgICAgLy8gb3IgRmlnTm9kZSB3ZSBhY3R1YWxseSBjYWxsIHRo aXMgbWV0aG9kIHdpdGggdGhlIG93bmVyIG5vdA0KLSAgICAgICAgICAgIC8vIHRoZSBGaWcgaXRz ZWxmLiBIb3dldmVyLCB0aGlzIG1ldGhvZCANCisgICAgICAgICAgICAvLyB0aGUgRmlnIGl0c2Vs Zi4gSG93ZXZlciwgdGhpcyBtZXRob2QNCiAgICAgICAgICAgICAvLyBpcyBjYWxsZWQgYnkgQWN0 aW9uRGVsZXRlTW9kZWxFbGVtZW50cw0KICAgICAgICAgICAgIC8vIGZvciBwcmltaXRpdmUgRmln cyAod2l0aG91dCBvd25lcikuDQotICAgICAgICAgICAgTE9HLmluZm8oIlJlcXVlc3QgdG8gZGVs ZXRlIGEgRmlnICIgKyBvYmouZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOw0KKyAgICAgICAgICAgIExP Ry5sb2coTGV2ZWwuSU5GTywNCisgICAgICAgICAgICAgICAgICAgICJSZXF1ZXN0IHRvIGRlbGV0 ZSBhIEZpZyB7MH0iLCBvYmouZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOw0KICAgICAgICAgfSBlbHNl IGlmIChvYmogaW5zdGFuY2VvZiBDb21tZW50RWRnZSkgew0KICAgICAgICAgICAgIC8vIFRPRE86 IFdoeSBpcyB0aGlzIGEgc3BlY2lhbCBjYXNlPyAtIHRmbQ0KICAgICAgICAgICAgIENvbW1lbnRF ZGdlIGNlID0gKENvbW1lbnRFZGdlKSBvYmo7DQotICAgICAgICAgICAgTE9HLmluZm8oIlJlbW92 aW5nIHRoZSBsaW5rIGZyb20gIiArIGNlLmdldEFubm90YXRlZEVsZW1lbnQoKQ0KLSAgICAgICAg ICAgICAgICAgICAgKyAiIHRvICIgKyBjZS5nZXRDb21tZW50KCkpOw0KKw0KKyAgICAgICAgICAg IExPRy5sb2coTGV2ZWwuSU5GTywgIlJlbW92aW5nIHRoZSBsaW5rIGZyb20gezB9IHRvIHsxfSIs DQorICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W117Y2UuZ2V0QW5ub3RhdGVkRWxlbWVu dCgpLCBjZS5nZXRDb21tZW50KCl9KTsNCiAgICAgICAgICAgICBjZS5kZWxldGUoKTsNCiAgICAg ICAgIH0NCiAgICAgfQ0KQEAgLTk0OCw5ICs5NTUsOSBAQA0KICAgICAgICAgaWYgKGRlZmF1bHRN b2RlbFR5cGVDYWNoZS5jb250YWluc0tleShuYW1lKSkgew0KICAgICAgICAgICAgIHJldHVybiBk ZWZhdWx0TW9kZWxUeXBlQ2FjaGUuZ2V0KG5hbWUpOw0KICAgICAgICAgfQ0KLSAgICAgICAgDQor DQogICAgICAgICBPYmplY3QgcmVzdWx0ID0gcHJvZmlsZUNvbmZpZ3VyYXRpb24uZmluZFR5cGUo bmFtZSk7DQotICAgICAgICANCisNCiAgICAgICAgIGRlZmF1bHRNb2RlbFR5cGVDYWNoZS5wdXQo bmFtZSwgcmVzdWx0KTsNCiAgICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgIH0NCkBAIC0xMDAy LDcgKzEwMDksOCBAQA0KICAgICAgICAgYm9vbGVhbiBtb2RlbEZvdW5kID0gZmFsc2U7DQogICAg ICAgICBmb3IgKE9iamVjdCBlbGVtZW50IDogZWxlbWVudHMpIHsNCiAgICAgICAgICAgICBpZiAo IU1vZGVsLmdldEZhY2FkZSgpLmlzQVBhY2thZ2UoZWxlbWVudCkpIHsNCi0gICAgICAgICAgICAg ICAgTE9HLndhcm4oIlRvcCBsZXZlbCBlbGVtZW50IG90aGVyIHRoYW4gcGFja2FnZSBmb3VuZCAt ICIgDQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuV0FSTklORywNCisgICAgICAgICAg ICAgICAgICAgICAgICAiVG9wIGxldmVsIGVsZW1lbnQgb3RoZXIgdGhhbiBwYWNrYWdlIGZvdW5k IC0gIg0KICAgICAgICAgICAgICAgICAgICAgICAgICsgTW9kZWwuZ2V0RmFjYWRlKCkuZ2V0TmFt ZShlbGVtZW50KSk7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIGlmIChNb2RlbC5nZXRG YWNhZGUoKS5pc0FNb2RlbChlbGVtZW50KQ0KQEAgLTEwNTAsNyArMTA1OCw3IEBADQogICAgICAg ICByZXR1cm4gdXVpZFJlZnM7DQogICAgIH0NCiANCi0gICAgDQorDQogICAgIHB1YmxpYyB2b2lk IHNldFNlYXJjaFBhdGgoZmluYWwgTGlzdDxTdHJpbmc+IHRoZVNlYXJjaHBhdGgpIHsNCiAgICAg ICAgIHNlYXJjaHBhdGguY2xlYXIoKTsNCiAgICAgICAgIHNlYXJjaHBhdGguYWRkQWxsKHRoZVNl YXJjaHBhdGgpOw0KQEAgLTEwNzMsNyArMTA4MSw3IEBADQogICAgIHB1YmxpYyB2b2lkIHNldEFj dGl2ZURpYWdyYW0oZmluYWwgQXJnb0RpYWdyYW0gdGhlRGlhZ3JhbSkgew0KICAgICAgICAgYWN0 aXZlRGlhZ3JhbSA9IHRoZURpYWdyYW07DQogICAgIH0NCi0gICAgDQorDQogICAgIHB1YmxpYyB2 b2lkIHNldFNhdmVkRGlhZ3JhbU5hbWUoU3RyaW5nIGRpYWdyYW1OYW1lKSB7DQogICAgICAgICBz YXZlZERpYWdyYW1OYW1lID0gZGlhZ3JhbU5hbWU7DQogICAgIH0NCkBAIC0xMDg4LDcgKzEwOTYs NyBAQA0KICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgIE1vZGVsLmdldFVtbEZh Y3RvcnkoKS5kZWxldGVFeHRlbnQocm9vdHMuaXRlcmF0b3IoKS5uZXh0KCkpOw0KICAgICAgICAg ICAgIH0gY2F0Y2ggKEludmFsaWRFbGVtZW50RXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICAg ICAgTE9HLndhcm4oIkV4dGVudCBkZWxldGVkIGEgc2Vjb25kIHRpbWUiKTsNCisgICAgICAgICAg ICAgICAgTE9HLmxvZyhMZXZlbC5XQVJOSU5HLCAiRXh0ZW50IGRlbGV0ZWQgYSBzZWNvbmQgdGlt ZSIpOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICByb290cy5jbGVhcigpOw0KICAgICAg ICAgfQ0KQEAgLTExNDksNyArMTE1Nyw3IEBADQogICAgIHB1YmxpYyBVbmRvTWFuYWdlciBnZXRV bmRvTWFuYWdlcigpIHsNCiAgICAgICAgIHJldHVybiB1bmRvTWFuYWdlcjsNCiAgICAgfQ0KLSAg ICAgICAgDQorDQogICAgIHB1YmxpYyBQcm9maWxlQ29uZmlndXJhdGlvbiBnZXRQcm9maWxlQ29u ZmlndXJhdGlvbigpIHsNCiAgICAgICAgIHJldHVybiBwcm9maWxlQ29uZmlndXJhdGlvbjsNCiAg ICAgfQ0KQEAgLTExNjYsNyArMTE3NCw3IEBADQogICAgICAgICAgICAgLy8gYW5kIHRoZXJlJ3Mg bm8gb3RoZXIgd2F5IHRvIGFkZCBhbm90aGVyIG9uZQ0KICAgICAgICAgICAgIG1lbWJlcnMuYWRk KHBjKTsNCiAgICAgICAgIH0NCi0gICAgICAgIA0KKw0KICAgICAgICAgUHJvZmlsZUZhY2FkZS5h cHBseUNvbmZpZ3VyYXRpb24ocGMpOw0KICAgICB9DQogDQpAQCAtMTE3Niw3ICsxMTg0LDcgQEAN CiAvLyAgICAgICAgcmV0dXJuIGRpcnR5Ow0KICAgICAgICAgcmV0dXJuIFByb2plY3RNYW5hZ2Vy LmdldE1hbmFnZXIoKS5pc1NhdmVBY3Rpb25FbmFibGVkKCk7DQogICAgIH0NCi0gICAgDQorDQog ICAgIHB1YmxpYyB2b2lkIHNldERpcnR5KGJvb2xlYW4gaXNEaXJ0eSkgew0KICAgICAgICAgLy8g VE9ETzogUGxhY2Vob2xkZXIgaW1wbGVtZW50YXRpb24gdW50aWwgc3VwcG9ydCBmb3IgdHJhY2tp bmcgb24NCiAgICAgICAgIC8vIGEgcGVyLXByb2plY3QgYmFzaXMgaXMgaW1wbGVtZW50ZWQNCg0K TW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwva2VybmVsL1By b2plY3RNYW5hZ2VyLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2Uv YnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9rZXJu ZWwvUHJvamVjdE1hbmFnZXIuamF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZy Mj0xOTkwNw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBw L3NyYy9vcmcvYXJnb3VtbC9rZXJuZWwvUHJvamVjdE1hbmFnZXIuamF2YQkob3JpZ2luYWwpDQor KysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9rZXJuZWwvUHJvamVjdE1h bmFnZXIuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC00NSwxMSArNDUsMTIgQEAN CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQogaW1wb3J0IGphdmEudXRpbC5MaW5rZWRM aXN0Ow0KIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcu TGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiANCiBpbXBvcnQgamF2 YXguc3dpbmcuQWN0aW9uOw0KIGltcG9ydCBqYXZheC5zd2luZy5ldmVudC5FdmVudExpc3RlbmVy TGlzdDsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5h cmdvdW1sLmNvZ25pdGl2ZS5EZXNpZ25lcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwuaTE4bi5UcmFu c2xhdG9yOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5tb2RlbC5Nb2RlbDsNCkBAIC03MSw4ICs3Miw4 IEBADQogICogb2YgcHJvamVjdHMgbGlrZSBvbmUgd291bGQgZXhwZWN0LiBUaGlzIGNvdWxkIGJl IGEgbmljZSBleHRlbnNpb24NCiAgKiBmb3IgdGhlIGZ1dHVyZSBvZiBBcmdvVU1MLiAgQXMgc29v biBhcyB0aGUgY3VycmVudCBwcm9qZWN0IGlzDQogICogY2hhbmdlZCwgYSBwcm9wZXJ0eSBjaGFu Z2VkIGV2ZW50IGlzIGZpcmVkLiA8cD4NCi0gKiANCi0gKiBUT0RPOiBNb3ZlIGV2ZXJ5dGhpbmcg cmVsYXRlZCB0byB0aGUgY3JlYXRpb24gb2YgYSBwcm9qZWN0IA0KKyAqDQorICogVE9ETzogTW92 ZSBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGNyZWF0aW9uIG9mIGEgcHJvamVjdA0KICAqIGlu dG8gdGhlIFByb2plY3RGYWN0b3J5Lg0KICAqDQogICogQHNpbmNlIE5vdiAxNywgMjAwMg0KQEAg LTg1LDEwICs4NiwxMCBAQA0KICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBk ZWZpbmVzIHRoZSBjdXJyZW50IHByb2plY3QuICBUaGUgdmFsdWVzDQogICAgICAqIHBhc3NlZCBh cmUgUHJvamVjdHMsIG5vdCBTdHJpbmdzLiAgVGhlICduYW1lJyBoZXJlIHJlZmVycyB0byB0aGUg bmFtZQ0KICAgICAgKiBvZiB0aGlzIHByb3BlcnR5LCBub3QgdGhlIG5hbWUgb2YgdGhlIHByb2pl Y3QuDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAZGVwcmVjYXRlZCBmb3IgMC4yNy4yIGJ5 IHRmbW9ycmlzLiBMaXN0ZW5lcnMgb2YgdGhpcyBldmVudCB3aGljaCBleHBlY3QNCiAgICAgICog ICAgICAgICAgICAgaXQgdG8gaW5kaWNhdGUgYSBuZXcgcHJvamVjdCBiZWluZyBvcGVuZWQgc2hv dWxkIGxpc3RlbiBmb3INCi0gICAgICogICAgICAgICAgICAge0BsaW5rICNPUEVOX1BST0pFQ1RT X1BST1BFUlRZfS4gTGlzdGVuZXJzIHdobyB0aGluayANCisgICAgICogICAgICAgICAgICAge0Bs aW5rICNPUEVOX1BST0pFQ1RTX1BST1BFUlRZfS4gTGlzdGVuZXJzIHdobyB0aGluaw0KICAgICAg KiAgICAgICAgICAgICB0aGV5IG5lZWQgdG8ga25vdyBhIHNpbmdsZSBnbG9iYWwgY3VycmVudCBw cm9qZWN0IG5lZWQNCiAgICAgICogICAgICAgICAgICAgdG8gYmUgY2hhbmdlZCB0byBkZWFsIHdp dGggdGhpbmdzIG9uIGEgcGVyLXByb2plY3QgYmFzaXMuDQogICAgICAqLw0KQEAgLTEwMSw3ICsx MDIsOCBAQA0KICAgICAgKi8NCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BFTl9Q Uk9KRUNUU19QUk9QRVJUWSA9ICJvcGVuUHJvamVjdHMiOw0KIA0KLSAgICBwcml2YXRlIHN0YXRp YyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyLmdldExvZ2dlcihQcm9qZWN0TWFuYWdlci5jbGFz cyk7DQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KKyAgICAgICAgTG9n Z2VyLmdldExvZ2dlcihQcm9qZWN0TWFuYWdlci5jbGFzcy5nZXROYW1lKCkpOw0KIA0KICAgICAv KioNCiAgICAgICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLg0KQEAgLTEx Miw3ICsxMTQsNyBAQA0KICAgICAgKiBUaGUgcHJvamVjdCB0aGF0IGlzIHZpc2libGUgaW4gdGhl IHByb2plY3Ricm93c2VyLg0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSBzdGF0aWMgUHJvamVjdCBj dXJyZW50UHJvamVjdDsNCi0gICAgDQorDQogICAgIHByaXZhdGUgc3RhdGljIExpbmtlZExpc3Q8 UHJvamVjdD4gb3BlblByb2plY3RzID0gbmV3IExpbmtlZExpc3Q8UHJvamVjdD4oKTsNCiANCiAg ICAgLyoqDQpAQCAtMTIyLDcgKzEyNCw3IEBADQogICAgIHByaXZhdGUgYm9vbGVhbiBjcmVhdGlu Z0N1cnJlbnRQcm9qZWN0Ow0KIA0KICAgICBwcml2YXRlIEFjdGlvbiBzYXZlQWN0aW9uOw0KLSAg ICANCisNCiAgICAgLyoqDQogICAgICAqIFRoZSBsaXN0ZW5lciBsaXN0Lg0KICAgICAgKi8NCkBA IC0yMTEsNyArMjEzLDcgQEANCiAgICAgICogPHA+DQogICAgICAqIElmIHRoZSBhcmd1bWVudCBp cyBudWxsLCB0aGVuIHRoZSBjdXJyZW50IHByb2plY3Qgd2lsbCBiZSBmb3Jnb3R0ZW4NCiAgICAg ICogYWJvdXQuDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAcGFyYW0gbmV3UHJvamVjdCBU aGUgbmV3IHByb2plY3QuDQogICAgICAqIEBkZXByZWNhdGVkIGZvciAwLjI3LjIgYnkgdGZtb3Jy aXMuIFRoZXJlIGlzIG5vIGxvbmdlciB0aGUgY29uY2VwdCBvZiBhDQogICAgICAqICAgICAgICAg ICAgIHNpbmdsZSBnbG9iYWwgImN1cnJlbnQiIHByb2plY3QuIEluIHRoZSBmdXR1cmUsIG11bHRp cGxlDQpAQCAtMjUzLDcgKzI1NSw3IEBADQogICAgICAqIHdoaWNoIHRoZXkgY2FuIGRpc2NvdmVy IGJ5IHRyYXZlcnNpbmcgdGhlaXIgY29udGFpbmluZyBlbGVtZW50cyAoZS5nLg0KICAgICAgKiBG aWctPkRpYWdyYW0tPkRpYWdyYW1TZXR0aW5ncykuDQogICAgICAqIDxwPg0KLSAgICAgKiANCisg ICAgICoNCiAgICAgICogQHJldHVybiBQcm9qZWN0IHRoZSBjdXJyZW50IHByb2plY3Qgb3IgbnVs bCBpZiBub25lDQogICAgICAqIEBkZXByZWNhdGVkIGZvciAwLjI3LjIgYnkgdGZtb3JyaXMuIFRo ZXJlIGlzIG5vIGxvbmdlciB0aGUgY29uY2VwdCBvZiBhDQogICAgICAqICAgICAgICAgICAgIHNp bmdsZSBnbG9iYWwgImN1cnJlbnQiIHByb2plY3QuIEluIHRoZSBmdXR1cmUsIG11bHRpcGxlDQpA QCAtMjY5LDcgKzI3MSw3IEBADQogICAgIHB1YmxpYyBQcm9qZWN0IGdldEN1cnJlbnRQcm9qZWN0 KCkgew0KICAgICAgICAgcmV0dXJuIGN1cnJlbnRQcm9qZWN0Ow0KICAgICB9DQotICAgIA0KKw0K ICAgICAvKioNCiAgICAgICogQHJldHVybiBhIGxpc3Qgb2YgdGhlIGN1cnJlbnRseSBvcGVuIFBy b2plY3RzIGluIHRoZSBvcmRlciB0aGV5IHdlcmUNCiAgICAgICogb3BlbmVkDQpAQCAtMjc5LDkg KzI4MSw5IEBADQogICAgICAgICBpZiAoY3VycmVudFByb2plY3QgIT0gbnVsbCkgew0KICAgICAg ICAgICAgIHJlc3VsdC5hZGQoY3VycmVudFByb2plY3QpOw0KICAgICAgICAgfQ0KLSAgICAgICAg cmV0dXJuIHJlc3VsdDsgICAgICAgIA0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsNCiAgICAgfQ0K LSAgICANCisNCiAgICAgLyoqDQogICAgICAqIE1ha2VzIGFuIGVtcHR5IHByb2plY3QuDQogICAg ICAqIEByZXR1cm4gUHJvamVjdCB0aGUgZW1wdHkgcHJvamVjdA0KQEAgLTI5NiwyMSArMjk4LDIx IEBADQogICAgICAqIEhpc3RvcmljYWxseSBuZXcgcHJvamVjdHMgaGF2ZSBiZWVuIGNyZWF0ZWQg d2l0aCB0d28gZGVmYXVsdCBkaWFncmFtcw0KICAgICAgKiAoQ2xhc3MgYW5kIFVzZSBDYXNlKS4g Tk9URTogQXJnb1VNTCBjdXJyZW50bHkgcmVxdWlyZXMgYXQgbGVhc3Qgb25lDQogICAgICAqIGRp YWdyYW0gZm9yIHByb3BlciBvcGVyYXRpb24uDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBA cGFyYW0gYWRkRGVmYXVsdERpYWdyYW1zDQogICAgICAqICAgICAgICAgICAgaWYgdHJ1ZSB0aGUg cHJvamVjdCB3aWxsIGJlIGJlIGNyZWF0ZWQgd2l0aCB0aGUgdHdvIHN0YW5kYXJkDQogICAgICAq ICAgICAgICAgICAgZGVmYXVsdCBkaWFncmFtcyAoQ2xhc3MgYW5kIFVzZSBDYXNlKQ0KICAgICAg KiBAcmV0dXJuIFByb2plY3QgdGhlIG5ld2x5IGNyZWF0ZWQgcHJvamVjdA0KICAgICAgKi8NCi0g ICAgcHVibGljIFByb2plY3QgbWFrZUVtcHR5UHJvamVjdChmaW5hbCBib29sZWFuIGFkZERlZmF1 bHREaWFncmFtcykgeyAgICANCisgICAgcHVibGljIFByb2plY3QgbWFrZUVtcHR5UHJvamVjdChm aW5hbCBib29sZWFuIGFkZERlZmF1bHREaWFncmFtcykgew0KICAgICAgICAgZmluYWwgQ29tbWFu ZCBjbWQgPSBuZXcgTm9uVW5kb2FibGVDb21tYW5kKCkgew0KIA0KICAgICAgICAgICAgIEBPdmVy cmlkZQ0KICAgICAgICAgICAgIHB1YmxpYyBPYmplY3QgZXhlY3V0ZSgpIHsNCiAgICAgICAgICAg ICAgICAgTW9kZWwuZ2V0UHVtcCgpLnN0b3BQdW1waW5nRXZlbnRzKCk7DQotICAgICAgICAgICAg ICAgIA0KKw0KICAgICAgICAgICAgICAgICBjcmVhdGluZ0N1cnJlbnRQcm9qZWN0ID0gdHJ1ZTsN Ci0gICAgICAgICAgICAgICAgTE9HLmluZm8oIm1ha2luZyBlbXB0eSBwcm9qZWN0Iik7DQorICAg ICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywgIm1ha2luZyBlbXB0eSBwcm9qZWN0Iik7 DQogICAgICAgICAgICAgICAgIFByb2plY3QgbmV3UHJvamVjdCA9IG5ldyBQcm9qZWN0SW1wbCgp Ow0KICAgICAgICAgICAgICAgICBjcmVhdGVEZWZhdWx0TW9kZWwobmV3UHJvamVjdCk7DQogICAg ICAgICAgICAgICAgIGlmIChhZGREZWZhdWx0RGlhZ3JhbXMpIHsNCkBAIC0zNDIsNyArMzQ0LDcg QEANCiAgICAgICogSGlzdG9yaWNhbGx5IG5ldyBwcm9qZWN0cyBoYXZlIGJlZW4gY3JlYXRlZCB3 aXRoIHR3byBkZWZhdWx0IGRpYWdyYW1zDQogICAgICAqIChDbGFzcyBhbmQgVXNlIENhc2UpLiBO T1RFOiBBcmdvVU1MIGN1cnJlbnRseSByZXF1aXJlcyBhdCBsZWFzdCBvbmUNCiAgICAgICogZGlh Z3JhbSBmb3IgcHJvcGVyIG9wZXJhdGlvbi4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBw YXJhbSBhZGREZWZhdWx0RGlhZ3JhbXMNCiAgICAgICogICAgICAgICAgICBpZiB0cnVlIHRoZSBw cm9qZWN0IHdpbGwgYmUgYmUgY3JlYXRlZCB3aXRoIHRoZSBzdGFuZGFyZA0KICAgICAgKiAgICAg ICAgICAgIGRlZmF1bHQgZGlhZ3JhbSAoQ2xhc3MpDQpAQCAtMzU0LDkgKzM1Niw5IEBADQogICAg ICAgICAgICAgQE92ZXJyaWRlDQogICAgICAgICAgICAgcHVibGljIE9iamVjdCBleGVjdXRlKCkg ew0KICAgICAgICAgICAgICAgICBNb2RlbC5nZXRQdW1wKCkuc3RvcFB1bXBpbmdFdmVudHMoKTsN Ci0gICAgICAgICAgICAgICAgDQorDQogICAgICAgICAgICAgICAgIGNyZWF0aW5nQ3VycmVudFBy b2plY3QgPSB0cnVlOw0KLSAgICAgICAgICAgICAgICBMT0cuaW5mbygibWFraW5nIGVtcHR5IHBy b2ZpbGUgcHJvamVjdCIpOw0KKyAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJt YWtpbmcgZW1wdHkgcHJvZmlsZSBwcm9qZWN0Iik7DQogICAgICAgICAgICAgICAgIFByb2plY3Qg bmV3UHJvamVjdCA9IG5ldyBQcm9qZWN0SW1wbChQcm9qZWN0LlBST0ZJTEVfUFJPSkVDVCk7DQog ICAgICAgICAgICAgICAgIGNyZWF0ZURlZmF1bHRQcm9maWxlKG5ld1Byb2plY3QpOw0KICAgICAg ICAgICAgICAgICBpZiAoYWRkRGVmYXVsdERpYWdyYW1zKSB7DQpAQCAtMzc5LDcgKzM4MSw3IEBA DQogICAgIC8qKg0KICAgICAgKiBBcHBseSBhbGwgcHJvZmlsZXMgZnJvbSB0aGUgcHJvZmlsZSBj b25maWd1cmF0aW9uIHRvIGEgbW9kZWwgKGNhbiBiZSBhDQogICAgICAqIHByb2ZpbGUgdG9vKS4N Ci0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0IHdp dGggdGhlIHByb2ZpbGUgY29uZmlndXJhdGlvbi4NCiAgICAgICogQHBhcmFtIG1vZGVsIFRoZSBt b2RlbCB0byBhcHBseSB0aGUgcHJvZmlsZXMgdG8uDQogICAgICAqLw0KQEAgLTM5NCw4ICszOTYs OSBAQA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwbHlQcm9maWxlKG1vZGVsLCBw cm9maWxlKTsNCiAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgfSBjYXRj aCAoUHJvZmlsZUV4Y2VwdGlvbiBwZSkgew0KLSAgICAgICAgICAgICAgICAgICAgTE9HLndhcm4o IkZhaWxlZCB0byBnZXQgcHJvZmlsZSBwYWNrYWdlcyBmcm9tIHByb2ZpbGUgIg0KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICArIHAuZ2V0RGlzcGxheU5hbWUoKSk7DQorICAgICAgICAgICAg ICAgICAgICBMT0cubG9nKExldmVsLldBUk5JTkcsDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJGYWlsZWQgdG8gZ2V0IHByb2ZpbGUgcGFja2FnZXMgZnJvbSBwcm9maWxlIHswfSIsDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHApOw0KICAgICAgICAgICAgICAgICB9DQogICAg ICAgICAgICAgfQ0KICAgICAgICAgfQ0KQEAgLTQwNCwxNyArNDA3LDE3IEBADQogICAgIC8qKg0K ICAgICAgKiBDcmVhdGUgdGhlIGRlZmF1bHQgZGlhZ3JhbXMgZm9yIHRoZSBwcm9qZWN0LiBDdXJy ZW50bHkgYSBDbGFzcyBEaWFncmFtDQogICAgICAqIGFuZCBhIFVzZUNhc2UgZGlhZ3JhbS4NCi0g ICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBwcm9qZWN0IHRoZSBwcm9qZWN0IHRvIGNy ZWF0ZSB0aGUgZGlhZ3JhbXMgaW4uDQogICAgICAqLw0KICAgICBwcml2YXRlIHZvaWQgY3JlYXRl RGVmYXVsdERpYWdyYW1zKFByb2plY3QgcHJvamVjdCkgew0KLSAgICAgICAgTE9HLmRlYnVnKCJD cmVhdGluZyBkZWZhdWx0IGRpYWdyYW1zIik7DQorICAgICAgICBMT0cubG9nKExldmVsLkZJTkUs ICJDcmVhdGluZyBkZWZhdWx0IGRpYWdyYW1zIik7DQogICAgICAgICBPYmplY3QgbW9kZWwgPSBw cm9qZWN0LmdldFJvb3RzKCkuaXRlcmF0b3IoKS5uZXh0KCk7DQogICAgICAgICBEaWFncmFtRmFj dG9yeSBkZiA9IERpYWdyYW1GYWN0b3J5LmdldEluc3RhbmNlKCk7DQogICAgICAgICBBcmdvRGlh Z3JhbSBkID0gY3JlYXRlQ2xhc3NEaWFncmFtKHByb2plY3QpOw0KLSAgICAgICAgTE9HLmRlYnVn KCJDcmVhdGluZyB1c2UgY2FzZSBkaWFncmFtIik7DQorICAgICAgICBMT0cubG9nKExldmVsLkZJ TkUsICJDcmVhdGluZyB1c2UgY2FzZSBkaWFncmFtIik7DQogICAgICAgICBwcm9qZWN0LmFkZE1l bWJlcihkZi5jcmVhdGUoDQotICAgICAgICAgICAgICAgIERpYWdyYW1GYWN0b3J5LkRpYWdyYW1U eXBlLlVzZUNhc2UsIG1vZGVsLCANCisgICAgICAgICAgICAgICAgRGlhZ3JhbUZhY3RvcnkuRGlh Z3JhbVR5cGUuVXNlQ2FzZSwgbW9kZWwsDQogICAgICAgICAgICAgICAgIHByb2plY3QuZ2V0UHJv amVjdFNldHRpbmdzKCkuZ2V0RGVmYXVsdERpYWdyYW1TZXR0aW5ncygpKSk7DQogICAgICAgICBw cm9qZWN0LmFkZE1lbWJlcihuZXcgUHJvamVjdE1lbWJlclRvZG9MaXN0KCIiLA0KICAgICAgICAg ICAgICAgICBwcm9qZWN0KSk7DQpAQCAtNDI0LDE2ICs0MjcsMTYgQEANCiANCiAgICAgLyoqDQog ICAgICAqIENyZWF0ZSBhIGNsYXNzIGRpYWdyYW1zIGZvciB0aGUgcHJvamVjdC4NCi0gICAgICog DQorICAgICAqDQogICAgICAqIEBwYXJhbSBwcm9qZWN0IHRoZSBwcm9qZWN0IHRvIGNyZWF0ZSB0 aGUgZGlhZ3JhbSBpbi4NCiAgICAgICogQHJldHVybiB0aGUgY3JlYXRlZCBjbGFzcyBkaWFncmFt DQogICAgICAqLw0KICAgICBwcml2YXRlIEFyZ29EaWFncmFtIGNyZWF0ZUNsYXNzRGlhZ3JhbShQ cm9qZWN0IHByb2plY3QpIHsNCi0gICAgICAgIExPRy5kZWJ1ZygiQ3JlYXRpbmcgY2xhc3MgZGlh Z3JhbSIpOw0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiQ3JlYXRpbmcgY2xhc3MgZGlh Z3JhbSIpOw0KICAgICAgICAgT2JqZWN0IG1vZGVsID0gcHJvamVjdC5nZXRSb290cygpLml0ZXJh dG9yKCkubmV4dCgpOw0KICAgICAgICAgRGlhZ3JhbUZhY3RvcnkgZGYgPSBEaWFncmFtRmFjdG9y eS5nZXRJbnN0YW5jZSgpOw0KICAgICAgICAgQXJnb0RpYWdyYW0gZCA9IGRmLmNyZWF0ZShEaWFn cmFtRmFjdG9yeS5EaWFncmFtVHlwZS5DbGFzcywNCi0gICAgICAgICAgICAgICAgbW9kZWwsIA0K KyAgICAgICAgICAgICAgICBtb2RlbCwNCiAgICAgICAgICAgICAgICAgcHJvamVjdC5nZXRQcm9q ZWN0U2V0dGluZ3MoKS5nZXREZWZhdWx0RGlhZ3JhbVNldHRpbmdzKCkpOw0KICAgICAgICAgcHJv amVjdC5hZGRNZW1iZXIoZCk7DQogICAgICAgICByZXR1cm4gZDsNCkBAIC00NDEsMTEgKzQ0NCwx MSBAQA0KIA0KICAgICAvKioNCiAgICAgICogQ3JlYXRlIGEgdG9kbyBsaXN0IGZvciB0aGUgcHJv amVjdC4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBwcm9qZWN0IHRoZSBwcm9q ZWN0IHRvIGNyZWF0ZSB0aGUgdG9kbyBsaXN0IGluLg0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSB2 b2lkIGNyZWF0ZVRvZG9MaXN0KFByb2plY3QgcHJvamVjdCkgew0KLSAgICAgICAgTE9HLmRlYnVn KCJDcmVhdGluZyB0b2RvIGxpc3QiKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgIkNy ZWF0aW5nIHRvZG8gbGlzdCIpOw0KICAgICAgICAgcHJvamVjdC5hZGRNZW1iZXIobmV3IFByb2pl Y3RNZW1iZXJUb2RvTGlzdCgiIiwNCiAgICAgICAgICAgICAgICAgcHJvamVjdCkpOw0KICAgICB9 DQpAQCAtNDUzLDcgKzQ1Niw3IEBADQogICAgIC8qKg0KICAgICAgKiBDcmVhdGUgdGhlIHRvcCBs ZXZlbCBtb2RlbCBmb3IgdGhlIHByb2plY3QgYW5kIHNldCBpdCBhcyBhIHJvb3QgYW5kIHRoZQ0K ICAgICAgKiBjdXJyZW50IG5hbWVzcGFjZS4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBw YXJhbSBwcm9qZWN0IHRoZSBwcm9qZWN0IHRvIGNyZWF0ZSB0aGUgbW9kZWwgaW4uDQogICAgICAq Lw0KICAgICBwcml2YXRlIHZvaWQgY3JlYXRlRGVmYXVsdE1vZGVsKFByb2plY3QgcHJvamVjdCkg ew0KQEAgLTQ3Miw3ICs0NzUsNyBAQA0KICAgICAvKioNCiAgICAgICogQ3JlYXRlIHRoZSB0b3Ag bGV2ZWwgcHJvZmlsZSBmb3IgdGhlIHByb2plY3QgYW5kIHNldCBpdCBhcyBhIHJvb3QgYW5kIHRo ZQ0KICAgICAgKiBjdXJyZW50IG5hbWVzcGFjZS4NCi0gICAgICogDQorICAgICAqDQogICAgICAq IEBwYXJhbSBwcm9qZWN0IHRoZSBwcm9qZWN0IHRvIGNyZWF0ZSB0aGUgbW9kZWwgaW4uDQogICAg ICAqLw0KICAgICBwcml2YXRlIHZvaWQgY3JlYXRlRGVmYXVsdFByb2ZpbGUoUHJvamVjdCBwcm9q ZWN0KSB7DQpAQCAtNDg3LDEwICs0OTAsMTAgQEANCiAgICAgICAgIC8vIGZpbmFsbHksIGFwcGx5 IHByb2ZpbGUgY29uZmlndXJhdGlvbiB0byB0aGUgbW9kZWwNCiAgICAgICAgIGFwcGx5UHJvZmls ZUNvbmZpZ3VyYXRpb24ocHJvamVjdCwgbW9kZWwpOw0KICAgICB9DQotICAgIA0KKw0KICAgICAv KioNCiAgICAgICogU2V0IHRoZSBzYXZlIGFjdGlvbi4NCi0gICAgICogDQorICAgICAqDQogICAg ICAqIEBwYXJhbSBzYXZlIHRoZSBhY3Rpb24gdG8gYmUgdXNlZA0KICAgICAgKi8NCiAgICAgcHVi bGljIHZvaWQgc2V0U2F2ZUFjdGlvbihBY3Rpb24gc2F2ZSkgew0KQEAgLTUwMCw3ICs1MDMsNyBA QA0KICAgICAgICAgLy8gc2F2ZSBidXR0b24vbWVudSBpdGVtIGV0Yy4NCiAgICAgICAgIERlc2ln bmVyLnNldFNhdmVBY3Rpb24oc2F2ZSk7DQogICAgIH0NCi0gICAgDQorDQogICAgIC8qKg0KICAg ICAgKiBAcmV0dXJuIHRydWUgaXMgdGhlIHNhdmUgYWN0aW9uIGlzIGN1cnJlbnRseSBlbmFibGVk DQogICAgICAqIDxwPg0KQEAgLTUxNSw3ICs1MTgsNyBAQA0KICAgICAgKiBjdXJyZW50IHByb2pl Y3QncyBzYXZlIHN0YXRlIGhhcyBjaGFuZ2VkLiBUaGVyZSBhcmUgMiByZWNlaXZlcnM6DQogICAg ICAqIHRoZSBTYXZlUHJvamVjdCB0b29sIGljb24gYW5kIHRoZSB0aXRsZSBiYXIgKGZvciBzaG93 aW5nIGEgKikuDQogICAgICAqIDxwPg0KLSAgICAgKiBAZGVwcmVjYXRlZCBmb3IgMC4yNy4yIGJ5 IHRmbW9ycmlzLiAgVXNlIA0KKyAgICAgKiBAZGVwcmVjYXRlZCBmb3IgMC4yNy4yIGJ5IHRmbW9y cmlzLiAgVXNlDQogICAgICAqIHtAbGluayBQcm9qZWN0I3NldERpcnR5KGJvb2xlYW4pfS4NCiAg ICAgICovDQogICAgIHB1YmxpYyB2b2lkIHNldFNhdmVFbmFibGVkKGJvb2xlYW4gbmV3VmFsdWUp IHsNCkBAIC01MjcsNyArNTMwLDcgQEANCiAgICAgcHJpdmF0ZSB2b2lkIGFkZFByb2plY3QoUHJv amVjdCBuZXdQcm9qZWN0KSB7DQogICAgICAgICBvcGVuUHJvamVjdHMuYWRkTGFzdChuZXdQcm9q ZWN0KTsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIFJlbW92ZSB0aGUgcHJv amVjdC4NCiAgICAgICoNCkBAIC01MzUsNyArNTM4LDcgQEANCiAgICAgICovDQogICAgIHB1Ymxp YyB2b2lkIHJlbW92ZVByb2plY3QoUHJvamVjdCBvbGRQcm9qZWN0KSB7DQogICAgICAgICBvcGVu UHJvamVjdHMucmVtb3ZlKG9sZFByb2plY3QpOw0KLSAgICAgICAgDQorDQogICAgICAgICAvLyBU T0RPOiBUaGlzIGNvZGUgY2FuIGJlIHJlbW92ZWQgd2hlbiBnZXRDdXJyZW50UHJvamVjdCBpcyBy ZW1vdmVkDQogICAgICAgICBpZiAoY3VycmVudFByb2plY3QgPT0gb2xkUHJvamVjdCkgew0KICAg ICAgICAgICAgIGlmIChvcGVuUHJvamVjdHMuc2l6ZSgpID4gMCkgew0KDQpNb2RpZmllZDogdHJ1 bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9sYW5ndWFnZS91aS9MYW5ndWFnZUNv bWJvQm94LmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3Nl L2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9sYW5ndWFnZS91 aS9MYW5ndWFnZUNvbWJvQm94LmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYm cjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFw cC9zcmMvb3JnL2FyZ291bWwvbGFuZ3VhZ2UvdWkvTGFuZ3VhZ2VDb21ib0JveC5qYXZhCShvcmln aW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL2xhbmd1YWdl L3VpL0xhbmd1YWdlQ29tYm9Cb3guamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0x LDYgKzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmln aHQgKGMpIDIwMDkgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAy MDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZl ZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBt YWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vu c2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMg YXZhaWxhYmxlIGF0DQpAQCAtNDAsMTAgKzQwLDExIEBADQogDQogaW1wb3J0IGphdmEuYXd0LkRp bWVuc2lvbjsNCiBpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOw0KK2ltcG9ydCBqYXZhLnV0aWwu bG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KIA0KIGlt cG9ydCBqYXZheC5zd2luZy5KQ29tYm9Cb3g7DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGou TG9nZ2VyOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5hcHBsaWNhdGlvbi5ldmVudHMuQXJnb0V2ZW50 UHVtcDsNCiBpbXBvcnQgb3JnLmFyZ291bWwuYXBwbGljYXRpb24uZXZlbnRzLkFyZ29FdmVudFR5 cGVzOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5hcHBsaWNhdGlvbi5ldmVudHMuQXJnb0dlbmVyYXRv ckV2ZW50Ow0KQEAgLTYwLDcgKzYxLDggQEANCiAgICAgaW1wbGVtZW50cyBBcmdvR2VuZXJhdG9y RXZlbnRMaXN0ZW5lciB7DQogDQogICAgIC8qKiBsb2dnZXIgKi8NCi0gICAgcHJpdmF0ZSBzdGF0 aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoTGFuZ3VhZ2VDb21ib0JveC5j bGFzcyk7DQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KKyAgICAgICAg TG9nZ2VyLmdldExvZ2dlcihMYW5ndWFnZUNvbWJvQm94LmNsYXNzLmdldE5hbWUoKSk7DQogDQog ICAgIC8qKg0KICAgICAgKiBUaGUgY29uc3RydWN0b3IuDQpAQCAtOTcsNyArOTksNyBAQA0KICAg ICAgICAgICAgICAgICBMYW5ndWFnZSBsbCA9IChMYW5ndWFnZSkgaXRlcmF0b3IubmV4dCgpOw0K ICAgICAgICAgICAgICAgICBhZGRJdGVtKGxsKTsNCiAgICAgICAgICAgICB9IGNhdGNoIChFeGNl cHRpb24gZSkgew0KLSAgICAgICAgICAgICAgICBMT0cuZXJyb3IoIlVuZXhwZWN0ZWQgZXhjZXB0 aW9uIiwgZSk7DQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiVW5leHBl Y3RlZCBleGNlcHRpb24iLCBlKTsNCiAgICAgICAgICAgICB9DQogICAgICAgICB9DQogICAgICAg ICBzZXRWaXNpYmxlKHRydWUpOw0KDQpNb2RpZmllZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3Ny Yy9vcmcvYXJnb3VtbC9tb2R1bGVsb2FkZXIvTW9kdWxlTG9hZGVyMi5qYXZhDQpVcmw6IGh0dHA6 Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdv dW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvbW9kdWxlbG9hZGVyL01vZHVsZUxvYWRlcjIuamF2YT92 aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9tb2R1bGVs b2FkZXIvTW9kdWxlTG9hZGVyMi5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3Vt bC1hcHAvc3JjL29yZy9hcmdvdW1sL21vZHVsZWxvYWRlci9Nb2R1bGVMb2FkZXIyLmphdmEJMjAx Mi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMSw2ICsxLDYgQEANCiAvKiAkSWQkDQogICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA5IENvbnRyaWJ1dG9ycyAtIHNl ZSBiZWxvdw0KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEyIENvbnRyaWJ1dG9ycyAtIHNlZSBi ZWxvdw0KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29t cGFueWluZyBtYXRlcmlhbHMNCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAgKiB3aGljaCBhY2NvbXBhbmll cyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KQEAgLTYwLDggKzYwLDkg QEANCiBpbXBvcnQgamF2YS51dGlsLmphci5KYXJFbnRyeTsNCiBpbXBvcnQgamF2YS51dGlsLmph ci5KYXJGaWxlOw0KIGltcG9ydCBqYXZhLnV0aWwuamFyLk1hbmlmZXN0Ow0KK2ltcG9ydCBqYXZh LnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0K IA0KLWltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwu YXBwbGljYXRpb24uYXBpLkFic3RyYWN0QXJnb0pQYW5lbDsNCiBpbXBvcnQgb3JnLmFyZ291bWwu YXBwbGljYXRpb24uYXBpLkFyZ287DQogaW1wb3J0IG9yZy5hcmdvdW1sLmkxOG4uVHJhbnNsYXRv cjsNCkBAIC04Miw3ICs4Myw4IEBADQogICAgIC8qKg0KICAgICAgKiBMb2dnZXIuDQogICAgICAq Lw0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyLmdldExvZ2dl cihNb2R1bGVMb2FkZXIyLmNsYXNzKTsNCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2Vy IExPRyA9DQorICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKE1vZHVsZUxvYWRlcjIuY2xhc3MuZ2V0 TmFtZSgpKTsNCiANCiAgICAgLyoqDQogICAgICAqIFRoaXMgbWFwIGNvbnRhaW5zIHRoZSBtb2R1 bGUgbG9hZGVyIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtb2R1bGUuPHA+DQpAQCAtOTAsMTAgKzky LDEwIEBADQogICAgICAqIFRoZSBrZXlzIGlzIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBtb2R1bGVz Lg0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSBNYXA8TW9kdWxlSW50ZXJmYWNlLCBNb2R1bGVTdGF0 dXM+IG1vZHVsZVN0YXR1czsNCi0gICAgDQorDQogICAgIC8qKg0KICAgICAgKiBMaXN0IG9mIGxv Y2F0aW9ucyB0aGF0IHdlJ3ZlIHNlYXJjaGVkIGFuZC9vciBsb2FkZWQgbW9kdWxlcw0KLSAgICAg KiBmcm9tLiAgVGhpcyBpcyBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMgb25seSB0byBhbGxvdyBp dCB0byANCisgICAgICogZnJvbS4gIFRoaXMgaXMgZm9yIGluZm9ybWF0aW9uIHB1cnBvc2VzIG9u bHkgdG8gYWxsb3cgaXQgdG8NCiAgICAgICogYmUgZGlzcGxheWVkIGluIHRoZSBzZXR0aW5ncyBF bnZpcm9ubWVudCB0YWIuDQogICAgICAqLw0KICAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiBleHRl bnNpb25Mb2NhdGlvbnMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCkBAIC0xMjIsNyArMTI0 LDcgQEANCiAgICAgICogQ29uc3RydWN0b3IgZm9yIHRoaXMgb2JqZWN0Lg0KICAgICAgKi8NCiAg ICAgcHJpdmF0ZSBNb2R1bGVMb2FkZXIyKCkgew0KLQltb2R1bGVTdGF0dXMgPSBuZXcgSGFzaE1h cDxNb2R1bGVJbnRlcmZhY2UsIE1vZHVsZVN0YXR1cz4oKTsNCisgICAgICAgIG1vZHVsZVN0YXR1 cyA9IG5ldyBIYXNoTWFwPE1vZHVsZUludGVyZmFjZSwgTW9kdWxlU3RhdHVzPigpOw0KICAgICAg ICAgY29tcHV0ZUV4dGVuc2lvbkxvY2F0aW9ucygpOw0KICAgICB9DQogDQpAQCAtMTMyLDcgKzEz NCw3IEBADQogICAgICAqIEByZXR1cm4gdGhlIGluc3RhbmNlDQogICAgICAqLw0KICAgICBwdWJs aWMgc3RhdGljIE1vZHVsZUxvYWRlcjIgZ2V0SW5zdGFuY2UoKSB7DQotCXJldHVybiBJTlNUQU5D RTsNCisgICAgICAgIHJldHVybiBJTlNUQU5DRTsNCiAgICAgfQ0KIA0KICAgICAvKioNCkBAIC0x NjAsNyArMTYyLDcgQEANCiAgICAgICogQHJldHVybiBBIENvbGxlY3Rpb24gb2YgYWxsIGF2YWls YWJsZSBtb2R1bGVzLg0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSBDb2xsZWN0aW9uPE1vZHVsZUlu dGVyZmFjZT4gYXZhaWxhYmxlTW9kdWxlcygpIHsNCi0JcmV0dXJuIENvbGxlY3Rpb25zLnVubW9k aWZpYWJsZUNvbGxlY3Rpb24obW9kdWxlU3RhdHVzLmtleVNldCgpKTsNCisgICAgICAgIHJldHVy biBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVDb2xsZWN0aW9uKG1vZHVsZVN0YXR1cy5rZXlTZXQo KSk7DQogICAgIH0NCiANCiAgICAgLy8gQWNjZXNzIG1ldGhvZHMgZm9yIHByb2dyYW0gaW5mcmFz dHJ1Y3R1cmUuDQpAQCAtMTczLDcgKzE3NSw3IEBADQogICAgICAqICAgICAgICAgICAgICAgICAg ICAgICBzb21lIG9mIHRoZSBtb2R1bGVzIGlzIGFsbG93ZWQgdG8gZmFpbC4NCiAgICAgICovDQog ICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBkb0xvYWQoYm9vbGVhbiBmYWlsaW5nQWxsb3dlZCkgew0K LQlnZXRJbnN0YW5jZSgpLmRvSW50ZXJuYWwoZmFpbGluZ0FsbG93ZWQpOw0KKyAgICAgICAgZ2V0 SW5zdGFuY2UoKS5kb0ludGVybmFsKGZhaWxpbmdBbGxvd2VkKTsNCiAgICAgfQ0KIA0KICAgICAv LyBBY2Nlc3MgbWV0aG9kcyBmb3IgbW9kdWxlcyB0aGF0IG5lZWQgdG8gcXVlcnkgYWJvdXQgdGhl IHN0YXR1cyBvZg0KQEAgLTE4NSw3ICsxODcsNyBAQA0KICAgICAgKiBAcGFyYW0gbmFtZSBpcyB0 aGUgbW9kdWxlIG5hbWUgb2YgdGhlIHF1ZXJpZWQgbW9kdWxlDQogICAgICAqLw0KICAgICBwdWJs aWMgc3RhdGljIGJvb2xlYW4gaXNFbmFibGVkKFN0cmluZyBuYW1lKSB7DQotCXJldHVybiBnZXRJ bnN0YW5jZSgpLmlzRW5hYmxlZEludGVybmFsKG5hbWUpOw0KKyAgICAgICAgcmV0dXJuIGdldElu c3RhbmNlKCkuaXNFbmFibGVkSW50ZXJuYWwobmFtZSk7DQogICAgIH0NCiANCiAgICAgLy8gQWNj ZXNzIG1ldGhvZHMgZm9yIHRoZSBHVUkgdGhhdCB0aGUgdXNlciB1c2VzIHRvIGVuYWJsZSBhbmQg ZGlzYWJsZQ0KQEAgLTE5NywxMyArMTk5LDEzIEBADQogICAgICAqIEByZXR1cm4gYWxsIHRoZSBu YW1lcy4NCiAgICAgICovDQogICAgIHB1YmxpYyBzdGF0aWMgQ29sbGVjdGlvbjxTdHJpbmc+IGFs bE1vZHVsZXMoKSB7DQotCUNvbGxlY3Rpb248U3RyaW5nPiBjb2xsID0gbmV3IEhhc2hTZXQ8U3Ry aW5nPigpOw0KKyAgICAgICAgQ29sbGVjdGlvbjxTdHJpbmc+IGNvbGwgPSBuZXcgSGFzaFNldDxT dHJpbmc+KCk7DQogDQotCWZvciAoTW9kdWxlSW50ZXJmYWNlIG1mIDogZ2V0SW5zdGFuY2UoKS5h dmFpbGFibGVNb2R1bGVzKCkpIHsNCi0JICAgIGNvbGwuYWRkKG1mLmdldE5hbWUoKSk7DQotCX0N CisgICAgICAgIGZvciAoTW9kdWxlSW50ZXJmYWNlIG1mIDogZ2V0SW5zdGFuY2UoKS5hdmFpbGFi bGVNb2R1bGVzKCkpIHsNCisgICAgICAgICAgICBjb2xsLmFkZChtZi5nZXROYW1lKCkpOw0KKyAg ICAgICAgfQ0KIA0KLQlyZXR1cm4gY29sbDsNCisgICAgICAgIHJldHVybiBjb2xsOw0KICAgICB9 DQogDQogICAgIC8qKg0KQEAgLTIxMyw3ICsyMTUsNyBAQA0KICAgICAgKiBAcmV0dXJuIDxjb2Rl PnRydWU8L2NvZGU+IGlmIHRoZSBtb2R1bGUgaXMgc2VsZWN0ZWQuDQogICAgICAqLw0KICAgICBw dWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTZWxlY3RlZChTdHJpbmcgbmFtZSkgew0KLQlyZXR1cm4g Z2V0SW5zdGFuY2UoKS5pc1NlbGVjdGVkSW50ZXJuYWwobmFtZSk7DQorICAgICAgICByZXR1cm4g Z2V0SW5zdGFuY2UoKS5pc1NlbGVjdGVkSW50ZXJuYWwobmFtZSk7DQogICAgIH0NCiANCiAgICAg LyoqDQpAQCAtMjI0LDE4ICsyMjYsMTggQEANCiAgICAgICogQHJldHVybiA8Y29kZT50cnVlPC9j b2RlPiBpZiB0aGUgbW9kdWxlIGlzIHNlbGVjdGVkLg0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSBi b29sZWFuIGlzU2VsZWN0ZWRJbnRlcm5hbChTdHJpbmcgbmFtZSkgew0KLQlNYXAuRW50cnk8TW9k dWxlSW50ZXJmYWNlLCBNb2R1bGVTdGF0dXM+IGVudHJ5ID0gZmluZE1vZHVsZShuYW1lKTsNCisg ICAgICAgIE1hcC5FbnRyeTxNb2R1bGVJbnRlcmZhY2UsIE1vZHVsZVN0YXR1cz4gZW50cnkgPSBm aW5kTW9kdWxlKG5hbWUpOw0KIA0KLQlpZiAoZW50cnkgIT0gbnVsbCkgew0KLQkgICAgTW9kdWxl U3RhdHVzIHN0YXR1cyA9IGVudHJ5LmdldFZhbHVlKCk7DQorICAgICAgICBpZiAoZW50cnkgIT0g bnVsbCkgew0KKyAgICAgICAgICAgIE1vZHVsZVN0YXR1cyBzdGF0dXMgPSBlbnRyeS5nZXRWYWx1 ZSgpOw0KIA0KLQkgICAgaWYgKHN0YXR1cyA9PSBudWxsKSB7DQotCQlyZXR1cm4gZmFsc2U7DQot CSAgICB9DQorICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBudWxsKSB7DQorICAgICAgICAgICAg ICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICB9DQogDQotCSAgICByZXR1cm4gc3RhdHVz LmlzU2VsZWN0ZWQoKTsNCi0JfQ0KLQlyZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgcmV0dXJu IHN0YXR1cy5pc1NlbGVjdGVkKCk7DQorICAgICAgICB9DQorICAgICAgICByZXR1cm4gZmFsc2U7 DQogICAgIH0NCiANCiAgICAgLyoqDQpAQCAtMjQ1LDcgKzI0Nyw3IEBADQogICAgICAqIEBwYXJh bSB2YWx1ZSBTZWxlY3RlZCBvciBub3QuDQogICAgICAqLw0KICAgICBwdWJsaWMgc3RhdGljIHZv aWQgc2V0U2VsZWN0ZWQoU3RyaW5nIG5hbWUsIGJvb2xlYW4gdmFsdWUpIHsNCi0JZ2V0SW5zdGFu Y2UoKS5zZXRTZWxlY3RlZEludGVybmFsKG5hbWUsIHZhbHVlKTsNCisgICAgICAgIGdldEluc3Rh bmNlKCkuc2V0U2VsZWN0ZWRJbnRlcm5hbChuYW1lLCB2YWx1ZSk7DQogICAgIH0NCiANCiAgICAg LyoqDQpAQCAtMjU2LDEzICsyNTgsMTMgQEANCiAgICAgICogQHBhcmFtIHZhbHVlIFNlbGVjdGVk IG9yIG5vdC4NCiAgICAgICovDQogICAgIHByaXZhdGUgdm9pZCBzZXRTZWxlY3RlZEludGVybmFs KFN0cmluZyBuYW1lLCBib29sZWFuIHZhbHVlKSB7DQotCU1hcC5FbnRyeTxNb2R1bGVJbnRlcmZh Y2UsIE1vZHVsZVN0YXR1cz4gZW50cnkgPSBmaW5kTW9kdWxlKG5hbWUpOw0KKyAgICAgICAgTWFw LkVudHJ5PE1vZHVsZUludGVyZmFjZSwgTW9kdWxlU3RhdHVzPiBlbnRyeSA9IGZpbmRNb2R1bGUo bmFtZSk7DQogDQotCWlmIChlbnRyeSAhPSBudWxsKSB7DQotCSAgICBNb2R1bGVTdGF0dXMgc3Rh dHVzID0gZW50cnkuZ2V0VmFsdWUoKTsNCisgICAgICAgIGlmIChlbnRyeSAhPSBudWxsKSB7DQor ICAgICAgICAgICAgTW9kdWxlU3RhdHVzIHN0YXR1cyA9IGVudHJ5LmdldFZhbHVlKCk7DQogDQot CSAgICBzdGF0dXMuc2V0U2VsZWN0ZWQodmFsdWUpOw0KLQl9DQorICAgICAgICAgICAgc3RhdHVz LnNldFNlbGVjdGVkKHZhbHVlKTsNCisgICAgICAgIH0NCiAgICAgfQ0KIA0KICAgICAvKioNCkBA IC0yODUsMTMgKzI4NywxMyBAQA0KICAgICAgKiBAcmV0dXJuIFRoZSBkZXNjcmlwdGlvbi4NCiAg ICAgICovDQogICAgIHByaXZhdGUgU3RyaW5nIGdldERlc2NyaXB0aW9uSW50ZXJuYWwoU3RyaW5n IG5hbWUpIHsNCi0JTWFwLkVudHJ5PE1vZHVsZUludGVyZmFjZSwgTW9kdWxlU3RhdHVzPiBlbnRy eSA9IGZpbmRNb2R1bGUobmFtZSk7DQorICAgICAgICBNYXAuRW50cnk8TW9kdWxlSW50ZXJmYWNl LCBNb2R1bGVTdGF0dXM+IGVudHJ5ID0gZmluZE1vZHVsZShuYW1lKTsNCiANCi0JaWYgKGVudHJ5 ID09IG51bGwpIHsNCi0JICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk1v ZHVsZSBkb2VzIG5vdCBleGlzdC4iKTsNCi0JfQ0KKyAgICAgICAgaWYgKGVudHJ5ID09IG51bGwp IHsNCisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNb2R1 bGUgZG9lcyBub3QgZXhpc3QuIik7DQorICAgICAgICB9DQogDQotCU1vZHVsZUludGVyZmFjZSBt b2R1bGUgPSBlbnRyeS5nZXRLZXkoKTsNCisgICAgICAgIE1vZHVsZUludGVyZmFjZSBtb2R1bGUg PSBlbnRyeS5nZXRLZXkoKTsNCiAgICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdC dWZmZXIoKTsNCiAgICAgICAgIFN0cmluZyBkZXNjID0gbW9kdWxlLmdldEluZm8oTW9kdWxlSW50 ZXJmYWNlLkRFU0NSSVBUSU9OKTsNCiAgICAgICAgIGlmIChkZXNjICE9IG51bGwpIHsNCkBAIC0z MjAsMzQgKzMyMiwzNiBAQA0KICAgICAgKiB0dXJuaW5nIG9uLg0KICAgICAgKi8NCiAgICAgcHJp dmF0ZSB2b2lkIGRvSW50ZXJuYWwoYm9vbGVhbiBmYWlsaW5nQWxsb3dlZCkgew0KLQlodW50Rm9y TW9kdWxlcygpOw0KKyAgICAgICAgaHVudEZvck1vZHVsZXMoKTsNCiANCi0JYm9vbGVhbiBzb21l TW9kdWxlU3VjY2VlZGVkOw0KLQlkbyB7DQotCSAgICBzb21lTW9kdWxlU3VjY2VlZGVkID0gZmFs c2U7DQorICAgICAgICBib29sZWFuIHNvbWVNb2R1bGVTdWNjZWVkZWQ7DQorICAgICAgICBkbyB7 DQorICAgICAgICAgICAgc29tZU1vZHVsZVN1Y2NlZWRlZCA9IGZhbHNlOw0KIA0KLQkgICAgZm9y IChNb2R1bGVJbnRlcmZhY2UgbW9kdWxlIDogZ2V0SW5zdGFuY2UoKS5hdmFpbGFibGVNb2R1bGVz KCkpIHsNCisgICAgICAgICAgICBmb3IgKE1vZHVsZUludGVyZmFjZSBtb2R1bGUgOiBnZXRJbnN0 YW5jZSgpLmF2YWlsYWJsZU1vZHVsZXMoKSkgew0KIA0KLQkJTW9kdWxlU3RhdHVzIHN0YXR1cyA9 IG1vZHVsZVN0YXR1cy5nZXQobW9kdWxlKTsNCisgICAgICAgICAgICAgICAgTW9kdWxlU3RhdHVz IHN0YXR1cyA9IG1vZHVsZVN0YXR1cy5nZXQobW9kdWxlKTsNCiANCi0JCWlmIChzdGF0dXMgPT0g bnVsbCkgew0KLQkJICAgIGNvbnRpbnVlOw0KLQkJfQ0KKyAgICAgICAgICAgICAgICBpZiAoc3Rh dHVzID09IG51bGwpIHsNCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgICAg ICAgICAgICB9DQogDQotCQlpZiAoIXN0YXR1cy5pc0VuYWJsZWQoKSAmJiBzdGF0dXMuaXNTZWxl Y3RlZCgpKSB7DQotCQkgICAgdHJ5IHsNCi0JCSAgICAgICAgaWYgKG1vZHVsZS5lbmFibGUoKSkg ew0KLQkJICAgICAgICAgICAgc29tZU1vZHVsZVN1Y2NlZWRlZCA9IHRydWU7DQotCQkgICAgICAg ICAgICBzdGF0dXMuc2V0RW5hYmxlZCgpOw0KLQkJICAgICAgICB9DQotCQkgICAgfQ0KLQkJICAg IC8vIENhdGNoIGFsbCBleGNlcHRpb25zIGFuZCBlcnJvcnMsIGhvd2V2ZXIgc2V2ZXJlDQotCQkg ICAgY2F0Y2ggKFRocm93YWJsZSBlKSB7ICAgICAgICAgICAgICAgICAgICAgICANCi0JCSAgICAg ICAgTE9HLmVycm9yKCJFeGNlcHRpb24gb3IgZXJyb3Igd2hpbGUgdHJ5aW5nIHRvICINCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgImVuYWJsZSBtb2R1bGUgIiArIG1vZHVsZS5n ZXROYW1lKCksIGUpOw0KKyAgICAgICAgICAgICAgICBpZiAoIXN0YXR1cy5pc0VuYWJsZWQoKSAm JiBzdGF0dXMuaXNTZWxlY3RlZCgpKSB7DQorICAgICAgICAgICAgICAgICAgICB0cnkgew0KKyAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2R1bGUuZW5hYmxlKCkpIHsNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc29tZU1vZHVsZVN1Y2NlZWRlZCA9IHRydWU7DQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0YXR1cy5zZXRFbmFibGVkKCk7DQorICAgICAgICAgICAgICAg ICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAg Ly8gQ2F0Y2ggYWxsIGV4Y2VwdGlvbnMgYW5kIGVycm9ycywgaG93ZXZlciBzZXZlcmUNCisJCSAg ICBjYXRjaCAoVGhyb3dhYmxlIGUpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBMT0cubG9n KExldmVsLlNFVkVSRSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeGNlcHRp b24gb3IgZXJyb3Igd2hpbGUgdHJ5aW5nIHRvICINCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICsgImVuYWJsZSBtb2R1bGUgIiArIG1vZHVsZS5nZXROYW1lKCksDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlKTsNCiAJCSAgICB9DQogCQl9IGVsc2UgaWYgKHN0YXR1 cy5pc0VuYWJsZWQoKSAmJiAhc3RhdHVzLmlzU2VsZWN0ZWQoKSkgew0KLQkJICAgIHRyeSB7IA0K KwkJICAgIHRyeSB7DQogCQkgICAgICAgIGlmIChtb2R1bGUuZGlzYWJsZSgpKSB7DQogCQkgICAg ICAgICAgICBzb21lTW9kdWxlU3VjY2VlZGVkID0gdHJ1ZTsNCiAJCSAgICAgICAgICAgIHN0YXR1 cy5zZXREaXNhYmxlZCgpOw0KQEAgLTM1NSw4ICszNTksMTAgQEANCiAJCSAgICB9DQogICAgICAg ICAgICAgICAgICAgICAvLyBDYXRjaCBhbGwgZXhjZXB0aW9ucyBhbmQgZXJyb3JzLCBob3dldmVy IHNldmVyZQ0KIAkJICAgIGNhdGNoIChUaHJvd2FibGUgZSkgew0KLQkJICAgICAgICBMT0cuZXJy b3IoIkV4Y2VwdGlvbiBvciBlcnJvciB3aGlsZSB0cnlpbmcgdG8gIg0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKyAiZGlzYWJsZSBtb2R1bGUgIiArIG1vZHVsZS5nZXROYW1lKCks IGUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLA0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4Y2VwdGlvbiBvciBlcnJvciB3aGlsZSB0 cnlpbmcgdG8gIg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiZGlzYWJsZSBt b2R1bGUgIiArIG1vZHVsZS5nZXROYW1lKCksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlKTsNCiAJCSAgICB9DQogCQl9DQogCSAgICB9DQpAQCAtMzg4LDExICszOTQsMTMgQEAN CiAJCX0NCiANCiAJCWlmIChzdGF0dXMuaXNTZWxlY3RlZCgpKSB7DQotCQkgICAgTE9HLndhcm4o Ik1vZHVsZUxvYWRlciB3YXMgbm90IGFibGUgdG8gZW5hYmxlIG1vZHVsZSAiDQotCQkgICAgICAg ICAgICAgKyBtb2R1bGUuZ2V0TmFtZSgpKTsNCisgICAgICAgICAgICAgICAgICAgIExPRy5sb2co TGV2ZWwuV0FSTklORywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vZHVsZUxvYWRl ciB3YXMgbm90IGFibGUgdG8gZW5hYmxlIG1vZHVsZSAiDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICsgbW9kdWxlLmdldE5hbWUoKSk7DQogCQl9IGVsc2Ugew0KLQkJICAgIExPRy53YXJu KCJNb2R1bGVMb2FkZXIgd2FzIG5vdCBhYmxlIHRvIGRpc2FibGUgbW9kdWxlICINCi0JCSAgICAg ICAgICAgICArIG1vZHVsZS5nZXROYW1lKCkpOw0KKyAgICAgICAgICAgICAgICAgICAgTE9HLmxv ZyhMZXZlbC5XQVJOSU5HLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW9kdWxlTG9h ZGVyIHdhcyBub3QgYWJsZSB0byBkaXNhYmxlIG1vZHVsZSAiDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICsgbW9kdWxlLmdldE5hbWUoKSk7DQogCQl9DQogCSAgICB9DQogCX0NCkBAIC00 NTksMTkgKzQ2NywyMCBAQA0KICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAg ICAgICAgYWRkQ2xhc3MoY2xhc3NOYW1lKTsNCiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoQ2xh c3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgICAgICAgICBMT0cuZXJyb3Io IkNvdWxkIG5vdCBsb2FkIG1vZHVsZSBmcm9tIGNsYXNzICIgKyBjbGFzc05hbWUpOw0KKyAgICAg ICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJDb3VsZCBub3QgbG9hZCBtb2R1bGUgZnJvbSBjbGFzcyAiICsgY2xhc3NOYW1l KTsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAg fQ0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIEZpbmQgYW5kIGVuYWJsZSBtb2R1bGVzIGZy b20gb3VyICJleHQiIGRpcmVjdG9yeSBhbmQgZnJvbSB0aGUNCiAgICAgICogZGlyZWN0b3J5IHNw ZWNpZmllZCBpbiAiYXJnby5leHQuZGlyIi48cD4NCiAgICAgICovDQogICAgIHByaXZhdGUgdm9p ZCBodW50Rm9yTW9kdWxlc0Zyb21FeHRlbnNpb25EaXIoKSB7DQogICAgICAgICBmb3IgKFN0cmlu ZyBsb2NhdGlvbiA6IGV4dGVuc2lvbkxvY2F0aW9ucykgew0KLSAgICAgICAgICAgIGh1bnRNb2R1 bGVzRnJvbU5hbWVkRGlyZWN0b3J5KGxvY2F0aW9uKTsgICAgICAgICAgICANCisgICAgICAgICAg ICBodW50TW9kdWxlc0Zyb21OYW1lZERpcmVjdG9yeShsb2NhdGlvbik7DQogICAgICAgICB9DQog ICAgIH0NCiANCkBAIC00OTksNyArNTA4LDcgQEANCiAgICAgICAgIFN0cmluZyBhcmdvSG9tZSA9 IG51bGw7DQogDQogICAgICAgICBpZiAoYXJnb1Jvb3QgIT0gbnVsbCkgew0KLSAgICAgICAgICAg IExPRy5pbmZvKCJhcmdvUm9vdCBpcyAiICsgYXJnb1Jvb3QpOw0KKyAgICAgICAgICAgIExPRy5s b2coTGV2ZWwuSU5GTywgImFyZ29Sb290IGlzIHswfSIsIGFyZ29Sb290KTsNCiAgICAgICAgICAg ICBpZiAoYXJnb1Jvb3Quc3RhcnRzV2l0aChGSUxFX1BSRUZJWCkpIHsNCiAgICAgICAgICAgICAg ICAgYXJnb0hvbWUgPQ0KICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbGUoYXJnb1Jvb3Quc3Vi c3RyaW5nKEZJTEVfUFJFRklYLmxlbmd0aCgpKSkNCkBAIC01MDksMTUgKzUxOCwxNiBAQA0KICAg ICAgICAgICAgIH0NCiANCiAgICAgICAgICAgICB0cnkgew0KLSAgICAgICAgICAgICAgICBhcmdv SG9tZSA9IGphdmEubmV0LlVSTERlY29kZXIuZGVjb2RlKGFyZ29Ib21lLCANCisgICAgICAgICAg ICAgICAgYXJnb0hvbWUgPSBqYXZhLm5ldC5VUkxEZWNvZGVyLmRlY29kZShhcmdvSG9tZSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICBBcmdvLmdldEVuY29kaW5nKCkpOw0KICAgICAgICAgICAg IH0gY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgew0KLSAgICAgICAgICAg ICAgICBMT0cud2FybigiRW5jb2RpbmcgIiANCi0gICAgICAgICAgICAgICAgICAgICAgICArIEFy Z28uZ2V0RW5jb2RpbmcoKSANCisgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5XQVJOSU5H LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICJFbmNvZGluZyAiDQorICAgICAgICAgICAgICAg ICAgICAgICAgKyBBcmdvLmdldEVuY29kaW5nKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAr ICIgaXMgdW5rbm93bi4iKTsNCiAgICAgICAgICAgICB9DQogDQotICAgICAgICAgICAgTE9HLmlu Zm8oImFyZ29Ib21lIGlzICIgKyBhcmdvSG9tZSk7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZl bC5JTkZPLCAiYXJnb0hvbWUgaXMgezB9IiwgYXJnb0hvbWUpOw0KICAgICAgICAgfQ0KIA0KICAg ICAgICAgaWYgKGFyZ29Ib21lICE9IG51bGwpIHsNCkBAIC01MzYsNyArNTQ2LDcgQEANCiAgICAg ICAgICAgICBleHRlbnNpb25Mb2NhdGlvbnMuYWRkKGV4dGRpcik7DQogICAgICAgICB9DQogICAg IH0NCi0gICAgDQorDQogICAgIC8qKg0KICAgICAgKiBHZXQgdGhlIGxpc3Qgb2YgbG9jYXRpb25z IHRoYXQgd2UndmUgbG9hZGVkIGV4dGVuc2lvbiBtb2R1bGVzIGZyb20uDQogICAgICAqIEByZXR1 cm4gQSBsaXN0IG9mIHRoZSBwYXRocyB3ZSd2ZSBsb2FkZWQgZnJvbS4NCkBAIC01NjksMTIgKzU3 OSwxMiBAQA0KIAkgICAgICAgICAgICAgICAgdHJ5IHsNCiAJICAgICAgICAgICAgICAgICAgICBw cm9jZXNzSmFyRmlsZShjbGFzc2xvYWRlciwgZmlsZSk7DQogCSAgICAgICAgICAgICAgICB9IGNh dGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsNCi0JICAgICAgICAgICAgICAgICAgICBM T0cuZXJyb3IoIlRoZSBjbGFzcyBpcyBub3QgZm91bmQuIiwgZSk7DQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiVGhlIGNsYXNzIGlzIG5vdCBmb3Vu ZC4iLCBlKTsNCiAJICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogCSAgICAgICAgICAgICAg ICB9DQogCQkgICAgfQ0KIAkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7DQotCQkgICAgTE9H LmVycm9yKCJDYW5ub3Qgb3BlbiBKYXIgZmlsZSAiICsgZmlsZSwgaW9lKTsNCisgICAgICAgICAg ICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiQ2Fubm90IG9wZW4gSmFyIGZpbGUgIiAr IGZpbGUsIGlvZSk7DQogCQl9DQogCSAgICB9DQogCX0NCkBAIC01OTQsMTIgKzYwNCwxMiBAQA0K ICAgICBwcml2YXRlIHZvaWQgcHJvY2Vzc0phckZpbGUoQ2xhc3NMb2FkZXIgY2xhc3Nsb2FkZXIs IEZpbGUgZmlsZSkNCiAgICAgICAgIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHsNCiAN Ci0JTE9HLmluZm8oIk9wZW5pbmcgamFyIGZpbGUgIiArIGZpbGUpOw0KKyAgICAgICAgTE9HLmxv ZyhMZXZlbC5JTkZPLCAiT3BlbmluZyBqYXIgZmlsZSB7MH0iLCBmaWxlKTsNCiAgICAgICAgIEph ckZpbGUgamFyZmlsZTsNCiAJdHJ5IHsNCiAJICAgIGphcmZpbGUgPSBuZXcgSmFyRmlsZShmaWxl KTsNCiAJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KLQkgICAgTE9HLmVycm9yKCJVbmFibGUg dG8gb3BlbiAiICsgZmlsZSwgZSk7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUs ICJVbmFibGUgdG8gb3BlbiAiICsgZmlsZSwgZSk7DQogICAgICAgICAgICAgcmV0dXJuOw0KIAl9 DQogDQpAQCAtNjA5LDE5ICs2MTksMTkgQEANCiAgICAgICAgICAgICBpZiAobWFuaWZlc3QgPT0g bnVsbCkgew0KICAgICAgICAgICAgICAgICAvLyBXZSBleHBlY3QgYWxsIGV4dGVuc2lvbnMgdG8g aGF2ZSBhIG1hbmlmZXN0IGV2ZW4gdGhvdWdoIHdlDQogICAgICAgICAgICAgICAgIC8vIGNhbiBv cGVyYXRlIHdpdGhvdXQgb25lIGlmIG5lY2Vzc2FyeS4NCi0gICAgICAgICAgICAgICAgTE9HLndh cm4oZmlsZSArICIgZG9lcyBub3QgaGF2ZSBhIG1hbmlmZXN0Iik7DQorICAgICAgICAgICAgICAg IExPRy5sb2coTGV2ZWwuV0FSTklORyxmaWxlICsgIiBkb2VzIG5vdCBoYXZlIGEgbWFuaWZlc3Qi KTsNCiAgICAgICAgICAgICB9DQogICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7DQot ICAgICAgICAgICAgTE9HLmVycm9yKCJVbmFibGUgdG8gcmVhZCBtYW5pZmVzdCBvZiAiICsgZmls ZSwgZSk7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsICJVbmFibGUgdG8gcmVh ZCBtYW5pZmVzdCBvZiAiICsgZmlsZSwgZSk7DQogICAgICAgICAgICAgcmV0dXJuOw0KICAgICAg ICAgfQ0KLSAgICAgICAgDQorDQogICAgICAgICAvLyBUT0RPOiBJdCBpcyBhIHBlcmZvcm1hbmNl IGRyYWluIHRvIGxvYWQgYWxsIGNsYXNzZXMgYXQgc3RhcnR1cCB0aW1lLg0KICAgICAgICAgLy8g VGhleSBzaG91bGQgYmUgbGF6eSBsb2FkZWQgd2hlbiBuZWVkZWQuICBJbnN0ZWFkIG9mIHNjYW5u aW5nIGFsbA0KLSAgICAgICAgLy8gY2xhc3NlcyBmb3Igb25lcyB3aGljaCBpbXBsZW1lbnQgb3Vy IGxvYWRhYmxlIG1vZHVsZSBpbnRlcmZhY2UsIHdlIA0KKyAgICAgICAgLy8gY2xhc3NlcyBmb3Ig b25lcyB3aGljaCBpbXBsZW1lbnQgb3VyIGxvYWRhYmxlIG1vZHVsZSBpbnRlcmZhY2UsIHdlDQog ICAgICAgICAvLyBzaG91bGQgdXNlIGEgbWFuaWZlc3QgZW50cnkgb3IgYSBzcGVjaWFsIG5hbWUv bmFtZSBwYXR0ZXJuIHRoYXQgd2UNCiAgICAgICAgIC8vIGxvb2sgZm9yIHRvIGZpbmQgdGhlIHNp bmdsZSBtYWluIG1vZHVsZSBjbGFzcyB0byBsb2FkIGhlcmUuICAtIHRmbQ0KLQkNCisNCiAgICAg ICAgIGJvb2xlYW4gbG9hZGVkQ2xhc3MgPSBmYWxzZTsNCiAgICAgICAgIGlmIChtYW5pZmVzdCA9 PSBudWxsKSB7DQogICAgICAgICAgICAgRW51bWVyYXRpb248SmFyRW50cnk+IGphckVudHJpZXMg PSBqYXJmaWxlLmVudHJpZXMoKTsNCkBAIC02NDQsMTIgKzY1NCwxMyBAQA0KICAgICAgICAgLy8g QWRkIHRoaXMgdG8gc2VhcmNoIGxpc3QgZm9yIEkxOE4gcHJvcGVydGllcw0KICAgICAgICAgLy8g KERvbmUgZm9yIGJvdGggbW9kdWxlcyAmIGxvY2FsaXplZCBwcm9wZXJ0eSBmaWxlIHNldHMpDQog ICAgICAgICBUcmFuc2xhdG9yLmFkZENsYXNzTG9hZGVyKGNsYXNzbG9hZGVyKTsNCi0gICAgICAg IA0KKw0KICAgICAgICAgLy8gSWYgaXQgZGlkbid0IGhhdmUgYSBsb2FkYWJsZSBtb2R1bGUgY2xh c3MgYW5kIGl0IGRvZXNuJ3QgbG9vayBsaWtlDQogICAgICAgICAvLyBhIGxvY2FsaXplZCBwcm9w ZXJ0eSBzZXQsIHdhcm4gdGhlIHVzZXIgdGhhdCBzb21ldGhpbmcgZnVubnkgaXMgaW4NCiAgICAg ICAgIC8vIHRoZWlyIGV4dGVuc2lvbiBkaXJlY3RvcnkNCiAgICAgICAgIGlmICghbG9hZGVkQ2xh c3MgJiYgIWZpbGUuZ2V0TmFtZSgpLmNvbnRhaW5zKCJhcmdvdW1sLWkxOG4tIikpIHsNCi0gICAg ICAgICAgICBMT0cuZXJyb3IoIkZhaWxlZCB0byBmaW5kIGFueSBsb2FkYWJsZSBBcmdvVU1MIG1v ZHVsZXMgaW4gamFyICINCisgICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwNCisgICAg ICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gZmluZCBhbnkgbG9hZGFibGUgQXJnb1VNTCBtb2R1 bGVzIGluIGphciAiDQogICAgICAgICAgICAgICAgICAgICArIGZpbGUpOw0KICAgICAgICAgfQ0K ICAgICB9DQpAQCAtNjU3LDcgKzY2OCw3IEBADQogICAgIC8qKg0KICAgICAgKiBQcm9jZXNzIGEg SkFSIGZpbGUgZW50cnksIGF0dGVtcHRpbmcgdG8gbG9hZCBhbnl0aGluZyB0aGF0IGxvb2tzIGxp a2UgYQ0KICAgICAgKiBKYXZhIGNsYXNzLg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBh cmFtIGNsYXNzbG9hZGVyDQogICAgICAqICAgICAgICAgICAgdGhlIGNsYXNzbG9hZGVyIHRvIHVz ZSB3aGVuIGxvYWRpbmcgdGhlIGNsYXNzDQogICAgICAqIEBwYXJhbSBjbmFtZQ0KQEAgLTcwMiwy OCArNzEzLDMzIEBADQogICAgIHByaXZhdGUgYm9vbGVhbiBhZGRDbGFzcyhDbGFzc0xvYWRlciBj bGFzc0xvYWRlciwgU3RyaW5nIGNsYXNzbmFtZSkNCiAgICAgICAgIHRocm93cyBDbGFzc05vdEZv dW5kRXhjZXB0aW9uIHsNCiANCi0gICAgICAgIExPRy5pbmZvKCJMb2FkaW5nIG1vZHVsZSAiICsg Y2xhc3NuYW1lKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywgIkxvYWRpbmcgbW9kdWxl ICIgKyBjbGFzc25hbWUpOw0KICAgICAgICAgQ2xhc3MgbW9kdWxlQ2xhc3M7DQogICAgICAgICB0 cnkgew0KICAgICAgICAgICAgIG1vZHVsZUNsYXNzID0gY2xhc3NMb2FkZXIubG9hZENsYXNzKGNs YXNzbmFtZSk7DQogICAgICAgICB9IGNhdGNoIChVbnN1cHBvcnRlZENsYXNzVmVyc2lvbkVycm9y IGUpIHsNCi0gICAgICAgICAgICBMT0cuZXJyb3IoIlVuc3VwcG9ydGVkIEphdmEgY2xhc3MgdmVy c2lvbiBmb3IgIiArIGNsYXNzbmFtZSk7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZF UkUsDQorICAgICAgICAgICAgICAgICAgICAiVW5zdXBwb3J0ZWQgSmF2YSBjbGFzcyB2ZXJzaW9u IGZvciAiICsgY2xhc3NuYW1lKTsNCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAg ICB9IGNhdGNoIChOb0NsYXNzRGVmRm91bmRFcnJvciBlKSB7DQotICAgICAgICAgICAgTE9HLmVy cm9yKCJVbmFibGUgdG8gZmluZCByZXF1aXJlZCBjbGFzcyB3aGlsZSBsb2FkaW5nICINCisgICAg ICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwNCisgICAgICAgICAgICAgICAgICAgICJVbmFi bGUgdG8gZmluZCByZXF1aXJlZCBjbGFzcyB3aGlsZSBsb2FkaW5nICINCiAgICAgICAgICAgICAg ICAgICAgICsgY2xhc3NuYW1lICsgIiAtIG1heSBpbmRpY2F0ZSBhbiBvYnNvbGV0ZSINCi0gICAg ICAgICAgICAgICAgICAgICsgIiBleHRlbnNpb24gbW9kdWxlIG9yIGFuIHVucmVzb2x2ZWQgZGVw ZW5kZW5jeSIsIGUpOw0KKyAgICAgICAgICAgICAgICAgICAgKyAiIGV4dGVuc2lvbiBtb2R1bGUg b3IgYW4gdW5yZXNvbHZlZCBkZXBlbmRlbmN5IiwNCisgICAgICAgICAgICAgICAgICAgIGUpOw0K ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSBl KSB7DQogICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBDbGFzc05vdEZvdW5kRXhjZXB0aW9u KSB7DQogICAgICAgICAgICAgICAgIHRocm93IChDbGFzc05vdEZvdW5kRXhjZXB0aW9uKSBlOw0K ICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBMT0cuZXJyb3IoIlVuZXhwZWN0ZWQgZXJyb3Ig d2hpbGUgbG9hZGluZyAiICsgY2xhc3NuYW1lLCBlKTsNCisgICAgICAgICAgICBMT0cubG9nKExl dmVsLlNFVkVSRSwNCisgICAgICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGVycm9yIHdoaWxl IGxvYWRpbmcgIiArIGNsYXNzbmFtZSwNCisgICAgICAgICAgICAgICAgICAgIGUpOw0KICAgICAg ICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgIH0NCi0gICAgICAgIA0KKw0KICAgICAgICAg aWYgKCFNb2R1bGVJbnRlcmZhY2UuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShtb2R1bGVDbGFzcykp IHsNCi0gICAgICAgICAgICBMT0cuZGVidWcoIlRoZSBjbGFzcyAiICsgY2xhc3NuYW1lICsgIiBp cyBub3QgYSBtb2R1bGUuIik7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiVGhl IGNsYXNzIHswfSBpcyBub3QgYSBtb2R1bGUuIiwgY2xhc3NuYW1lKTsNCiAgICAgICAgICAgICBy ZXR1cm4gZmFsc2U7DQogICAgICAgICB9DQogDQpAQCAtNzMyLDI2ICs3NDgsMzQgQEANCiAgICAg ICAgICAgICBkZWZhdWx0Q29uc3RydWN0b3IgPQ0KICAgICAgICAgICAgICAgICAgICAgbW9kdWxl Q2xhc3MuZ2V0RGVjbGFyZWRDb25zdHJ1Y3RvcihuZXcgQ2xhc3NbXSB7fSk7DQogICAgICAgICB9 IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgTE9HLmVycm9yKCJU aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBmb3IgY2xhc3MgIiArIGNsYXNzbmFtZQ0KLSAgICAgICAg ICAgICAgICAgICAgICArICIgaXMgbm90IGFjY2Vzc2FibGUuIiwNCi0gICAgICAgICAgICAgICAg ICAgICAgZSk7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsDQorICAgICAgICAg ICAgICAgICAgICAiVGhlIGRlZmF1bHQgY29uc3RydWN0b3IgZm9yIGNsYXNzICIgKyBjbGFzc25h bWUNCisgICAgICAgICAgICAgICAgICAgICsgIiBpcyBub3QgYWNjZXNzYWJsZS4iLA0KKyAgICAg ICAgICAgICAgICAgICAgZSk7DQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAg fSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICBMT0cuZXJy b3IoIlRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIGZvciBjbGFzcyAiICsgY2xhc3NuYW1lDQotICAg ICAgICAgICAgICAgICAgICAgICsgIiBpcyBub3QgZm91bmQuIiwgZSk7DQorICAgICAgICAgICAg TE9HLmxvZyhMZXZlbC5TRVZFUkUsDQorICAgICAgICAgICAgICAgICAgICAiVGhlIGRlZmF1bHQg Y29uc3RydWN0b3IgZm9yIGNsYXNzICIgKyBjbGFzc25hbWUNCisgICAgICAgICAgICAgICAgICAg ICsgIiBpcyBub3QgZm91bmQuIiwNCisgICAgICAgICAgICAgICAgICAgIGUpOw0KICAgICAgICAg ICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgIH0gY2F0Y2ggKE5vQ2xhc3NEZWZGb3VuZEVycm9y IGUpIHsNCi0gICAgICAgICAgICBMT0cuZXJyb3IoIlVuYWJsZSB0byBmaW5kIHJlcXVpcmVkIGNs YXNzIHdoaWxlIGxvYWRpbmcgIg0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLA0K KyAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBmaW5kIHJlcXVpcmVkIGNsYXNzIHdoaWxl IGxvYWRpbmcgIg0KICAgICAgICAgICAgICAgICAgICAgKyBjbGFzc25hbWUgKyAiIC0gbWF5IGlu ZGljYXRlIGFuIG9ic29sZXRlIg0KLSAgICAgICAgICAgICAgICAgICAgKyAiIGV4dGVuc2lvbiBt b2R1bGUgb3IgYW4gdW5yZXNvbHZlZCBkZXBlbmRlbmN5IiwgZSk7DQorICAgICAgICAgICAgICAg ICAgICArICIgZXh0ZW5zaW9uIG1vZHVsZSBvciBhbiB1bnJlc29sdmVkIGRlcGVuZGVuY3kiLA0K KyAgICAgICAgICAgICAgICAgICAgZSk7DQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAg ICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsNCi0gICAgICAgICAgICBMT0cuZXJyb3IoIlVu ZXhwZWN0ZWQgZXJyb3Igd2hpbGUgbG9hZGluZyAiICsgY2xhc3NuYW1lLCBlKTsNCisgICAgICAg ICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwNCisgICAgICAgICAgICAgICAgICAgICJVbmV4cGVj dGVkIGVycm9yIHdoaWxlIGxvYWRpbmcgIiArIGNsYXNzbmFtZSwNCisgICAgICAgICAgICAgICAg ICAgIGUpOw0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgIH0NCiANCiAgICAg ICAgIGlmICghTW9kaWZpZXIuaXNQdWJsaWMoZGVmYXVsdENvbnN0cnVjdG9yLmdldE1vZGlmaWVy cygpKSkgew0KLSAgICAgICAgICAgIExPRy5lcnJvcigiVGhlIGRlZmF1bHQgY29uc3RydWN0b3Ig Zm9yIGNsYXNzICIgKyBjbGFzc25hbWUNCisgICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVS RSwNCisgICAgICAgICAgICAgICAgICAgICJUaGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBmb3IgY2xh c3MgIiArIGNsYXNzbmFtZQ0KICAgICAgICAgICAgICAgICAgICAgKyAiIGlzIG5vdCBwdWJsaWMu ICBOb3QgbG9hZGVkLiIpOw0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgIH0N CkBAIC03NTksNDEgKzc4Myw1NCBAQA0KICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICBtb2R1 bGVJbnN0YW5jZSA9IGRlZmF1bHRDb25zdHJ1Y3Rvci5uZXdJbnN0YW5jZShuZXcgT2JqZWN0W117 fSk7DQogICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgew0KLSAg ICAgICAgICAgIExPRy5lcnJvcigiVGhlIGNvbnN0cnVjdG9yIGZvciBjbGFzcyAiICsgY2xhc3Nu YW1lDQotICAgICAgICAgICAgICAgICAgICArICIgaXMgY2FsbGVkIHdpdGggaW5jb3JyZWN0IGFy Z3VtZW50LiIsIGUpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLA0KKyAgICAg ICAgICAgICAgICAgICAgIlRoZSBjb25zdHJ1Y3RvciBmb3IgY2xhc3MgIiArIGNsYXNzbmFtZQ0K KyAgICAgICAgICAgICAgICAgICAgKyAiIGlzIGNhbGxlZCB3aXRoIGluY29ycmVjdCBhcmd1bWVu dC4iLA0KKyAgICAgICAgICAgICAgICAgICAgZSk7DQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl Ow0KICAgICAgICAgfSBjYXRjaCAoSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBlKSB7DQotICAgICAg ICAgICAgTE9HLmVycm9yKCJUaGUgY29uc3RydWN0b3IgZm9yIGNsYXNzICIgKyBjbGFzc25hbWUN Ci0gICAgICAgICAgICAgICAgICAgICsgIiB0aHJldyBhbiBleGNlcHRpb24uIiwgZSk7DQorICAg ICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsDQorICAgICAgICAgICAgICAgICAgICAiVGhl IGNvbnN0cnVjdG9yIGZvciBjbGFzcyAiICsgY2xhc3NuYW1lDQorICAgICAgICAgICAgICAgICAg ICArICIgdGhyZXcgYW4gZXhjZXB0aW9uLiIsDQorICAgICAgICAgICAgICAgICAgICBlKTsNCiAg ICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNz RXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICBMT0cuZXJyb3IoIlRoZSBjb25zdHJ1Y3RvciBm b3IgY2xhc3MgIiArIGNsYXNzbmFtZQ0KLSAgICAgICAgICAgICAgICAgICAgKyAiIGlzIG5vdCBh Y2Nlc3NpYmxlLiIsIGUpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLA0KKyAg ICAgICAgICAgICAgICAgICAgIlRoZSBjb25zdHJ1Y3RvciBmb3IgY2xhc3MgIiArIGNsYXNzbmFt ZQ0KKyAgICAgICAgICAgICAgICAgICAgKyAiIGlzIG5vdCBhY2Nlc3NpYmxlLiIsDQorICAgICAg ICAgICAgICAgICAgICBlKTsNCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICB9 IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICBMT0cu ZXJyb3IoIlRoZSBjb25zdHJ1Y3RvciBmb3IgY2xhc3MgIiArIGNsYXNzbmFtZQ0KLSAgICAgICAg ICAgICAgICAgICAgKyAiIGNhbm5vdCBiZSBjYWxsZWQuIiwgZSk7DQorICAgICAgICAgICAgTE9H LmxvZyhMZXZlbC5TRVZFUkUsDQorICAgICAgICAgICAgICAgICAgICAiVGhlIGNvbnN0cnVjdG9y IGZvciBjbGFzcyAiICsgY2xhc3NuYW1lDQorICAgICAgICAgICAgICAgICAgICArICIgY2Fubm90 IGJlIGNhbGxlZC4iLA0KKyAgICAgICAgICAgICAgICAgICAgZSk7DQogICAgICAgICAgICAgcmV0 dXJuIGZhbHNlOw0KICAgICAgICAgfSBjYXRjaCAoTm9DbGFzc0RlZkZvdW5kRXJyb3IgZSkgew0K LSAgICAgICAgICAgIExPRy5lcnJvcigiVW5hYmxlIHRvIGZpbmQgcmVxdWlyZWQgY2xhc3Mgd2hp bGUgaW5zdGFudGlhdGluZyAiDQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsDQor ICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGZpbmQgcmVxdWlyZWQgY2xhc3Mgd2hpbGUg aW5zdGFudGlhdGluZyAiDQogICAgICAgICAgICAgICAgICAgICArIGNsYXNzbmFtZSArICIgLSBt YXkgaW5kaWNhdGUgYW4gb2Jzb2xldGUiDQotICAgICAgICAgICAgICAgICAgICArICIgZXh0ZW5z aW9uIG1vZHVsZSBvciBhbiB1bnJlc29sdmVkIGRlcGVuZGVuY3kiLCBlKTsNCisgICAgICAgICAg ICAgICAgICAgICsgIiBleHRlbnNpb24gbW9kdWxlIG9yIGFuIHVucmVzb2x2ZWQgZGVwZW5kZW5j eSIsDQorICAgICAgICAgICAgICAgICAgICBlKTsNCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7 DQogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgew0KLSAgICAgICAgICAgIExPRy5lcnJv cigiVW5leHBlY3RlZCBlcnJvciB3aGlsZSBpbnN0YW50aWF0aW5nICIgKyBjbGFzc25hbWUsIGUp Ow0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLA0KKyAgICAgICAgICAgICAgICAg ICAgIlVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgaW5zdGFudGlhdGluZyAiICsgY2xhc3NuYW1lLA0K KyAgICAgICAgICAgICAgICAgICAgZSk7DQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAg ICAgICAgfQ0KIA0KICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjaGVjayBzaG91bGQgaGF2ZSBi ZWVuIHNhdGlzZmllZCBiZWZvcmUgd2UNCiAgICAgICAgIC8vIGluc3RhbnRpYXRlZCB0aGUgbW9k dWxlLCBidXQgZG91YmxlIGNoZWNrIGFnYWluDQogICAgICAgICBpZiAoIShtb2R1bGVJbnN0YW5j ZSBpbnN0YW5jZW9mIE1vZHVsZUludGVyZmFjZSkpIHsNCi0gICAgICAgICAgICBMT0cuZXJyb3Io IlRoZSBjbGFzcyAiICsgY2xhc3NuYW1lICsgIiBpcyBub3QgYSBtb2R1bGUuIik7DQorICAgICAg ICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsDQorICAgICAgICAgICAgICAgICAgICAiVGhlIGNs YXNzICIgKyBjbGFzc25hbWUgKyAiIGlzIG5vdCBhIG1vZHVsZS4iKTsNCiAgICAgICAgICAgICBy ZXR1cm4gZmFsc2U7DQogICAgICAgICB9DQogICAgICAgICBNb2R1bGVJbnRlcmZhY2UgbWYgPSAo TW9kdWxlSW50ZXJmYWNlKSBtb2R1bGVJbnN0YW5jZTsNCiANCiAgICAgICAgIGFkZE1vZHVsZSht Zik7DQotICAgICAgICBMT0cuaW5mbygiU3VjY2VzZnVsbHkgbG9hZGVkIG1vZHVsZSAiICsgY2xh c3NuYW1lKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywgIlN1Y2Nlc2Z1bGx5IGxvYWRl ZCBtb2R1bGUgezB9IiwgY2xhc3NuYW1lKTsNCiAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICB9 DQogDQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL25v dGF0aW9uL05vdGF0aW9uLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3Vy Y2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9u b3RhdGlvbi9Ob3RhdGlvbi5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIy PTE5OTA3DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAv c3JjL29yZy9hcmdvdW1sL25vdGF0aW9uL05vdGF0aW9uLmphdmEJKG9yaWdpbmFsKQ0KKysrIHRy dW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvbm90YXRpb24vTm90YXRpb24uamF2 YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0b3Jz IC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0g c2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUg YWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29t cGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNDEsMTAg KzQxLDExIEBADQogaW1wb3J0IGphdmEuYmVhbnMuUHJvcGVydHlDaGFuZ2VFdmVudDsNCiBpbXBv cnQgamF2YS5iZWFucy5Qcm9wZXJ0eUNoYW5nZUxpc3RlbmVyOw0KIGltcG9ydCBqYXZhLnV0aWwu TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRp bC5sb2dnaW5nLkxvZ2dlcjsNCiANCiBpbXBvcnQgamF2YXguc3dpbmcuSWNvbjsNCiANCi1pbXBv cnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmFwcGxpY2F0 aW9uLmV2ZW50cy5BcmdvRXZlbnRQdW1wOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5hcHBsaWNhdGlv bi5ldmVudHMuQXJnb0V2ZW50VHlwZXM7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmFwcGxpY2F0aW9u LmV2ZW50cy5BcmdvTm90YXRpb25FdmVudDsNCkBAIC02MSw3ICs2Miw4IEBADQogICovDQogcHVi bGljIGZpbmFsIGNsYXNzIE5vdGF0aW9uIGltcGxlbWVudHMgUHJvcGVydHlDaGFuZ2VMaXN0ZW5l ciB7DQogDQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dnZXIuZ2V0 TG9nZ2VyKE5vdGF0aW9uLmNsYXNzKTsNCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2Vy IExPRyA9DQorICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKE5vdGF0aW9uLmNsYXNzLmdldE5hbWUo KSk7DQogDQogICAgIC8vIFRPRE86IERvIHdlIGhhdmUgYW55IHBvdGVudGlhbCBjb25zdW1lcnMg b2YgdGhlIHVudmVyc2lvbmVkIG5hbWUgb3V0c2lkZQ0KICAgICAvLyBvZiB0aGUgbm90YXRpb24g c3Vic3lzdGVtPw0KQEAgLTc0LDcgKzc2LDcgQEANCiAgICAgICovDQogICAgIHB1YmxpYyBzdGF0 aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfTk9UQVRJT04gPSBERUZBVUxUX05PVEFUSU9OX05BTUUg KyAiICINCiAgICAgICAgICAgICArIERFRkFVTFRfTk9UQVRJT05fVkVSU0lPTjsNCi0gICAgDQor DQogICAgIC8qKg0KICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBBcmdvVU1MIG5vdGF0 aW9uLiAgVGhpcyBub3RhdGlvbiBpcw0KICAgICAgKiBwYXJ0IG9mIEFyZ29VTUwgY29yZSBkaXN0 cmlidXRpb24uDQpAQCAtMTg1LDcgKzE4Nyw5IEBADQogICAgICAqIEBwYXJhbSBuIHRoZSBOb3Rh dGlvbk5hbWUgdGhhdCB3aWxsIGJlY29tZSBkZWZhdWx0DQogICAgICAqLw0KICAgICBwdWJsaWMg c3RhdGljIHZvaWQgc2V0RGVmYXVsdE5vdGF0aW9uKE5vdGF0aW9uTmFtZSBuKSB7DQotICAgICAg ICBMT0cuaW5mbygiZGVmYXVsdCBub3RhdGlvbiBzZXQgdG8gIiArIG4uZ2V0Q29uZmlndXJhdGlv blZhbHVlKCkpOw0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLA0KKyAgICAgICAgICAgICAg ICAiZGVmYXVsdCBub3RhdGlvbiBzZXQgdG8gezB9Iiwgbi5nZXRDb25maWd1cmF0aW9uVmFsdWUo KSk7DQorDQogICAgICAgICBDb25maWd1cmF0aW9uLnNldFN0cmluZygNCiAgICAgICAgICAgICBL RVlfREVGQVVMVF9OT1RBVElPTiwNCiAgICAgICAgICAgICBuLmdldENvbmZpZ3VyYXRpb25WYWx1 ZSgpKTsNCkBAIC0yMTYsNyArMjIwLDcgQEANCiAgICAgICAgIGlmIChuID09IG51bGwpIHsNCiAg ICAgICAgICAgICBuID0gTm90YXRpb25OYW1lSW1wbC5maW5kTm90YXRpb24oREVGQVVMVF9OT1RB VElPTik7DQogCX0NCi0gICAgICAgIExPRy5kZWJ1ZygiZGVmYXVsdCBub3RhdGlvbiBpcyAiICsg bi5nZXRDb25maWd1cmF0aW9uVmFsdWUoKSk7DQorICAgICAgICBMT0cubG9nKExldmVsLkZJTkUs ICJkZWZhdWx0IG5vdGF0aW9uIGlzIHswfSIsIG4uZ2V0Q29uZmlndXJhdGlvblZhbHVlKCkpOw0K ICAgICAgICAgcmV0dXJuIG47DQogICAgIH0NCiANCkBAIC0yMzksMTEgKzI0Myw5IEBADQogICAg ICAqIEBzZWUgamF2YS5iZWFucy5Qcm9wZXJ0eUNoYW5nZUxpc3RlbmVyI3Byb3BlcnR5Q2hhbmdl KGphdmEuYmVhbnMuUHJvcGVydHlDaGFuZ2VFdmVudCkNCiAgICAgICovDQogICAgIHB1YmxpYyB2 b2lkIHByb3BlcnR5Q2hhbmdlKFByb3BlcnR5Q2hhbmdlRXZlbnQgcGNlKSB7DQotICAgICAgICBM T0cuaW5mbygNCi0gICAgICAgICAgICAiTm90YXRpb24gY2hhbmdlOiINCi0gICAgICAgICAgICAg ICAgKyBwY2UuZ2V0T2xkVmFsdWUoKQ0KLSAgICAgICAgICAgICAgICArICIgdG8gIg0KLSAgICAg ICAgICAgICAgICArIHBjZS5nZXROZXdWYWx1ZSgpKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwu SU5GTywgIk5vdGF0aW9uIGNoYW5nZTogezB9IHRvIHsxfSIsDQorICAgICAgICAgICAgICAgIG5l dyBPYmplY3RbXXtwY2UuZ2V0T2xkVmFsdWUoKSwgcGNlLmdldE5ld1ZhbHVlKCl9KTsNCisNCiAg ICAgICAgIEFyZ29FdmVudFB1bXAuZmlyZUV2ZW50KA0KICAgICAgICAgICAgIG5ldyBBcmdvTm90 YXRpb25FdmVudChBcmdvRXZlbnRUeXBlcy5OT1RBVElPTl9DSEFOR0VELCBwY2UpKTsNCiAgICAg fQ0KDQpNb2RpZmllZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9ub3Rh dGlvbi9Ob3RhdGlvbk5hbWVJbXBsLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9y Zy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJn b3VtbC9ub3RhdGlvbi9Ob3RhdGlvbk5hbWVJbXBsLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5 MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3Ny Yy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvbm90YXRpb24vTm90YXRpb25OYW1lSW1wbC5q YXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1s L25vdGF0aW9uL05vdGF0aW9uTmFtZUltcGwuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDAN CkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBD b3B5cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0 IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyBy ZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAq IGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGlj IExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBh bmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNDIsMTAgKzQyLDExIEBADQogaW1wb3J0IGphdmEudXRp bC5Db2xsZWN0aW9uczsNCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQogaW1wb3J0IGphdmEudXRp bC5MaXN0SXRlcmF0b3I7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9y dCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQogaW1wb3J0IGphdmF4LnN3aW5nLkljb247 DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KIGltcG9ydCBvcmcuYXJnb3Vt bC5hcHBsaWNhdGlvbi5ldmVudHMuQXJnb0V2ZW50UHVtcDsNCiBpbXBvcnQgb3JnLmFyZ291bWwu YXBwbGljYXRpb24uZXZlbnRzLkFyZ29FdmVudFR5cGVzOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5h cHBsaWNhdGlvbi5ldmVudHMuQXJnb05vdGF0aW9uRXZlbnQ7DQpAQCAtNjYsMTUgKzY3LDE2IEBA DQogICAgIC8qKg0KICAgICAgKiBMb2dnZXIuDQogICAgICAqLw0KLSAgICBwcml2YXRlIHN0YXRp YyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyLmdldExvZ2dlcihOb3RhdGlvbk5hbWVJbXBsLmNs YXNzKTsNCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9DQorICAgICAgICBM b2dnZXIuZ2V0TG9nZ2VyKE5vdGF0aW9uTmFtZUltcGwuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAg ICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsNCiAgICAgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbjsNCiAg ICAgcHJpdmF0ZSBJY29uIGljb247DQogDQotICAgIC8qKiBUaGUgb25lIGFuZCBvbmx5IGxpc3Qg b2Ygbm90YXRpb25zIGF2YWlsYWJsZSANCisgICAgLyoqIFRoZSBvbmUgYW5kIG9ubHkgbGlzdCBv ZiBub3RhdGlvbnMgYXZhaWxhYmxlDQogICAgICAqIGluIHRoZSBydW5uaW5nIEFyZ29VTUwgYXBw bGljYXRpb24uICovDQotICAgIHByaXZhdGUgc3RhdGljIEFycmF5TGlzdDxOb3RhdGlvbk5hbWU+ IG5vdGF0aW9ucyA9IA0KKyAgICBwcml2YXRlIHN0YXRpYyBBcnJheUxpc3Q8Tm90YXRpb25OYW1l PiBub3RhdGlvbnMgPQ0KICAgICAgICAgbmV3IEFycmF5TGlzdDxOb3RhdGlvbk5hbWU+KCk7DQog DQogICAgIC8qKg0KQEAgLTIxNiw3ICsyMTgsNyBAQA0KIAl9DQogICAgICAgICByZXR1cm4gbm47 DQogICAgIH0NCi0gICAgDQorDQogICAgIHN0YXRpYyBib29sZWFuIHJlbW92ZU5vdGF0aW9uKE5v dGF0aW9uTmFtZSB0aGVOb3RhdGlvbikgIHsNCiAgICAgICAgIHJldHVybiBub3RhdGlvbnMucmVt b3ZlKHRoZU5vdGF0aW9uKTsNCiAgICAgfQ0KQEAgLTI0Nyw3ICsyNDksNyBAQA0KIAkJfQ0KIAkg ICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCiAJICAgICAgICAvLyBUT0RPOiBEb2N1bWVudCB3 aHkgd2UgY2F0Y2ggdGhpcy4NCi0JICAgICAgICBMT0cuZXJyb3IoIlVuZXhwZWN0ZWQgZXhjZXB0 aW9uIiwgZSk7DQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiVW5leHBl Y3RlZCBleGNlcHRpb24iLCBlKTsNCiAJICAgIH0NCiAJfQ0KIAlyZXR1cm4gbnVsbDsNCg0KTW9k aWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvbm90YXRpb24vTm90 YXRpb25Qcm92aWRlci5qYXZhDQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNl L2Jyb3dzZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvbm90 YXRpb24vTm90YXRpb25Qcm92aWRlci5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5 OTA2JnIyPTE5OTA3DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3Vt bC1hcHAvc3JjL29yZy9hcmdvdW1sL25vdGF0aW9uL05vdGF0aW9uUHJvdmlkZXIuamF2YQkob3Jp Z2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9ub3RhdGlv bi9Ob3RhdGlvblByb3ZpZGVyLmphdmEJMjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMSw2 ICsxLDYgQEANCiAvKiAkSWQkDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0 IChjKSAyMDA5LTIwMTAgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChj KSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNl cnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFy ZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExp Y2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQg aXMgYXZhaWxhYmxlIGF0DQpAQCAtNDIsOCArNDIsOSBAQA0KIGltcG9ydCBqYXZhLmJlYW5zLlBy b3BlcnR5Q2hhbmdlTGlzdGVuZXI7DQogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQogaW1w b3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZl bDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KIA0KLWltcG9ydCBvcmcuYXBh Y2hlLmxvZzRqLkxvZ2dlcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwubW9kZWwuQWRkQXNzb2NpYXRp b25FdmVudDsNCiBpbXBvcnQgb3JnLmFyZ291bWwubW9kZWwuRGVsZXRlSW5zdGFuY2VFdmVudDsN CiBpbXBvcnQgb3JnLmFyZ291bWwubW9kZWwuTW9kZWw7DQpAQCAtNTcsMTIgKzU4LDEzIEBADQog ICogYnkgcGFyc2luZyB0aGUgdGV4dC4NCiAgKiBBZGRpdGlvbmFsbHksIGEgaGVscCB0ZXh0IGZv ciB0aGUgcGFyc2luZyBpcyBwcm92aWRlZCwNCiAgKiBzbyB0aGF0IHRoZSB1c2VyIGtub3dzIHRo ZSBzeW50YXguDQotICogDQorICoNCiAgKiBAYXV0aG9yIE1pY2hpZWwgdmFuIGRlciBXdWxwDQog ICovDQogcHVibGljIGFic3RyYWN0IGNsYXNzIE5vdGF0aW9uUHJvdmlkZXIgaW1wbGVtZW50cyBQ cm9wZXJ0eUNoYW5nZUxpc3RlbmVyIHsNCiANCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9n Z2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoTm90YXRpb25Qcm92aWRlci5jbGFzcyk7DQorICAg IHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KKyAgICAgICAgTG9nZ2VyLmdldExv Z2dlcihOb3RhdGlvblByb3ZpZGVyLmNsYXNzLmdldE5hbWUoKSk7DQogICAgIHByaXZhdGUgTm90 YXRpb25SZW5kZXJlciByZW5kZXJlcjsNCiANCiAgICAgLyoqDQpAQCAtODIsNyArODQsNyBAQA0K ICAgICAvKioNCiAgICAgICogUGFyc2VzIHRoZSBnaXZlbiB0ZXh0LCBhbmQgYWRhcHRzIHRoZSBt b2RlbEVsZW1lbnQgYW5kDQogICAgICAqIG1heWJlIHJlbGF0ZWQgZWxlbWVudHMgYWNjb3JkaW5n bHkuDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAcGFyYW0gbW9kZWxFbGVtZW50IHRoZSBt b2RlbGVsZW1lbnQgdG8gYWRhcHQNCiAgICAgICogQHBhcmFtIHRleHQgdGhlIHN0cmluZyBnaXZl biBieSB0aGUgdXNlciB0byBiZSBwYXJzZWQNCiAgICAgICogdG8gYWRhcHQgdGhlIG1vZGVsDQpA QCAtOTEsNTQgKzkzLDU0IEBADQogDQogICAgIC8qKg0KICAgICAgKiBHZW5lcmF0ZSBhIHN0cmlu ZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGdpdmVuIG1vZGVsIGVsZW1lbnQuDQotICAgICAqIA0K KyAgICAgKg0KICAgICAgKiBAcGFyYW0gbW9kZWxFbGVtZW50IHRoZSBiYXNlIFVNTCBlbGVtZW50 DQogICAgICAqIEBwYXJhbSBzZXR0aW5ncyBzZXR0aW5ncyB0aGF0IGNvbnRyb2wgcmVuZGVyaW5n IG9mIHRoZSB0ZXh0DQogICAgICAqIEByZXR1cm4gdGhlIHN0cmluZyB3cml0dGVuIGluIHRoZSBj b3JyZWN0IG5vdGF0aW9uDQogICAgICAqLw0KICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIHRv U3RyaW5nKE9iamVjdCBtb2RlbEVsZW1lbnQsDQogICAgICAgICAgICAgTm90YXRpb25TZXR0aW5n cyBzZXR0aW5ncyk7DQotICAgIA0KKw0KICAgICAvKioNCi0gICAgICogSW5pdGlhbGl6ZSB0aGUg YXBwcm9wcmlhdGUgbW9kZWwgY2hhbmdlIGxpc3RlbmVycyANCisgICAgICogSW5pdGlhbGl6ZSB0 aGUgYXBwcm9wcmlhdGUgbW9kZWwgY2hhbmdlIGxpc3RlbmVycw0KICAgICAgKiBmb3IgdGhlIGdp dmVuIG1vZGVsZWxlbWVudCB0byB0aGUgZ2l2ZW4gbGlzdGVuZXIuDQotICAgICAqIE92ZXJydWxl IHRoaXMgd2hlbiB5b3UgbmVlZCBtb3JlIHRoYW4gDQorICAgICAqIE92ZXJydWxlIHRoaXMgd2hl biB5b3UgbmVlZCBtb3JlIHRoYW4NCiAgICAgICogbGlzdGVuaW5nIHRvIGFsbCBldmVudHMgZnJv bSB0aGUgYmFzZSBtb2RlbGVsZW1lbnQuDQotICAgICAqIA0KLSAgICAgKiBAcGFyYW0gbW9kZWxF bGVtZW50IHRoZSBtb2RlbGVsZW1lbnQgdGhhdCB3ZSBwcm92aWRlIA0KKyAgICAgKg0KKyAgICAg KiBAcGFyYW0gbW9kZWxFbGVtZW50IHRoZSBtb2RlbGVsZW1lbnQgdGhhdCB3ZSBwcm92aWRlDQog ICAgICAqIG5vdGF0aW9uIGZvcg0KICAgICAgKi8NCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGlz ZUxpc3RlbmVyKE9iamVjdCBtb2RlbEVsZW1lbnQpIHsNCiAgICAgICAgIGFkZEVsZW1lbnRMaXN0 ZW5lcihtb2RlbEVsZW1lbnQpOw0KICAgICB9DQotICAgIA0KKw0KICAgICAvKioNCiAgICAgICog Q2xlYW4gb3V0IHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBiZWZvcmUuDQogICAgICAqIDxwPg0K LSAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyB0byByZW1vdmUgYWxsIGxpc3Rl bmVycyANCisgICAgICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgdG8gcmVtb3ZlIGFs bCBsaXN0ZW5lcnMNCiAgICAgICogdGhhdCB3ZXJlIHJlbWVtYmVyZWQgYnkgdGhlIHV0aWxpdHkg ZnVuY3Rpb25zIGJlbG93Lg0KICAgICAgKi8NCiAgICAgcHVibGljIHZvaWQgY2xlYW5MaXN0ZW5l cigpIHsNCiAgICAgICAgIHJlbW92ZUFsbEVsZW1lbnRMaXN0ZW5lcnMoKTsNCiAgICAgfQ0KLSAg ICANCisNCiAgICAgLyoqDQogICAgICAqIFVwZGF0ZSB0aGUgc2V0IG9mIGxpc3RlbmVycyBiYXNl ZCBvbiB0aGUgZ2l2ZW4gZXZlbnQuIDxwPg0KLSAgICAgKiANCi0gICAgICogVGhlIGRlZmF1bHQg aW1wbGVtZW50YXRpb24ganVzdCByZW1vdmVzIGFsbCBsaXN0ZW5lcnMsIGFuZCB0aGVuIA0KLSAg ICAgKiByZS1pbml0aWFsaXplcyBjb21wbGV0ZWx5IC0gdGhpcyBpcyBtZXRob2QgMS4gDQotICAg ICAqIEEgbW9yZSBlZmZpY2llbnQgd2F5IHdvdWxkIGJlIHRvIGRpc3NlY3QgDQorICAgICAqDQor ICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGp1c3QgcmVtb3ZlcyBhbGwgbGlzdGVu ZXJzLCBhbmQgdGhlbg0KKyAgICAgKiByZS1pbml0aWFsaXplcyBjb21wbGV0ZWx5IC0gdGhpcyBp cyBtZXRob2QgMS4NCisgICAgICogQSBtb3JlIGVmZmljaWVudCB3YXkgd291bGQgYmUgdG8gZGlz c2VjdA0KICAgICAgKiB0aGUgcHJvcGVydHlDaGFuZ2VFdmVudCwgYW5kIG9ubHkgYWRhcHQgdGhl IGxpc3RlbmVycw0KICAgICAgKiB0aGF0IG5lZWQgdG8gYmUgYWRhcHRlZCAtIHRoaXMgaXMgbWV0 aG9kIDIuIDxwPg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogTWV0aG9kIDIgaXMgZXhwbGFp bmVkIGJ5IHRoZSBjb2RlIGJlbG93IHRoYXQgaXMgY29tbWVudGVkIG91dC4NCiAgICAgICogTWV0 aG9kIDEgaXMgdGhlIGVhc2llc3QgdG8gaW1wbGVtZW50LCBzaW5jZSBhdCBldmVyeSBhcnJpdmFs IG9mIGFuIGV2ZW50LA0KLSAgICAgKiB3ZSBqdXN0IHJlbW92ZSBhbGwgb2xkIGxpc3RlbmVycywg YW5kIHRoZW4gaW5zcGVjdCB0aGUgY3VycmVudCBtb2RlbCwgDQotICAgICAqIGFuZCBhZGQgbGlz dGVuZXJzIHdoZXJlIHdlIG5lZWQgdGhlbS4gSS5lLiB0aGUgYWR2YW50YWdlIGlzIA0KLSAgICAg KiB0aGF0IHdlIG9ubHkgbmVlZCB0byB0cmF2ZXJzZSB0aGUgbW9kZWwgc3RydWN0dXJlIGluIG9u ZSBsb2NhdGlvbiwgaS5lLiANCisgICAgICogd2UganVzdCByZW1vdmUgYWxsIG9sZCBsaXN0ZW5l cnMsIGFuZCB0aGVuIGluc3BlY3QgdGhlIGN1cnJlbnQgbW9kZWwsDQorICAgICAqIGFuZCBhZGQg bGlzdGVuZXJzIHdoZXJlIHdlIG5lZWQgdGhlbS4gSS5lLiB0aGUgYWR2YW50YWdlIGlzDQorICAg ICAqIHRoYXQgd2Ugb25seSBuZWVkIHRvIHRyYXZlcnNlIHRoZSBtb2RlbCBzdHJ1Y3R1cmUgaW4g b25lIGxvY2F0aW9uLCBpLmUuDQogICAgICAqIHRoZSBpbml0aWFsaXNlTGlzdGVuZXIoKSBtZXRo b2QuDQotICAgICAqIA0KLSAgICAgKiBAcGFyYW0gbW9kZWxFbGVtZW50IHRoZSBtb2RlbGVsZW1l bnQgdGhhdCB3ZSBwcm92aWRlIA0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gbW9kZWxFbGVtZW50 IHRoZSBtb2RlbGVsZW1lbnQgdGhhdCB3ZSBwcm92aWRlDQogICAgICAqIG5vdGF0aW9uIGZvcg0K ICAgICAgKiBAcGFyYW0gcGNlIHRoZSByZWNlaXZlZCBldmVudCwgdGhhdCB3ZSBiYXNlIHRoZSBj aGFuZ2VzIG9uDQogICAgICAqLw0KQEAgLTE0OCwxNiArMTUwLDE2IEBADQogICAgICAgICAvLyAm JiBldmVudC5wcm9wZXJ0eU5hbWUgPSAicGFyYW1ldGVyIg0KICAgICAgICAgLy8gICAgIGlmIGV2 ZW50IGluc3RhbmNlb2YgQWRkQXNzb2NpYXRpb25FdmVudA0KICAgICAgICAgLy8gICAgICAgICBH ZXQgdGhlIHBhcmFtZXRlciBpbnN0YW5jZSBmcm9tIGV2ZW50Lm5ld1ZhbHVlDQotICAgICAgICAv LyAgICAgICAgIENhbGwgbW9kZWwgdG8gYWRkIGxpc3RlbmVyIG9uIHBhcmFtZXRlciBvbiBjaGFu Z2UgDQorICAgICAgICAvLyAgICAgICAgIENhbGwgbW9kZWwgdG8gYWRkIGxpc3RlbmVyIG9uIHBh cmFtZXRlciBvbiBjaGFuZ2UNCiAgICAgICAgIC8vICAgICAgICAgICAgIG9mICJuYW1lIiwgInR5 cGUiDQogICAgICAgICAvLyAgICAgZWxzZSBpZiBldmVudCBpbnN0YW5jZW9mIFJlbW92ZUFzc29j aWF0aW9uRXZlbnQNCiAgICAgICAgIC8vICAgICAgICAgR2V0IHRoZSBwYXJhbWV0ZXIgaW5zdGFu Y2UgZnJvbSBldmVudC5vbGRWYWx1ZQ0KLSAgICAgICAgLy8gICAgICAgICBDYWxsIG1vZGVsIHRv IHJlbW92ZSBsaXN0ZW5lciBvbiBwYXJhbWV0ZXIgb24gY2hhbmdlIA0KKyAgICAgICAgLy8gICAg ICAgICBDYWxsIG1vZGVsIHRvIHJlbW92ZSBsaXN0ZW5lciBvbiBwYXJhbWV0ZXIgb24gY2hhbmdl DQogICAgICAgICAvLyAgICAgICAgICAgICBvZiAibmFtZSIsICJ0eXBlIg0KICAgICAgICAgLy8g ICAgIGVuZCBpZg0KLSAgICAgICAgLy8gZW5kIGlmIA0KKyAgICAgICAgLy8gZW5kIGlmDQogICAg ICAgICBpZiAoTW9kZWwuZ2V0VW1sRmFjdG9yeSgpLmlzUmVtb3ZlZChtb2RlbEVsZW1lbnQpKSB7 DQotICAgICAgICAgICAgTE9HLndhcm4oIkVuY291bnRlcmVkIGRlbGV0ZWQgb2JqZWN0IGR1cmlu ZyBkZWxldGUgb2YgIiANCisgICAgICAgICAgICBMT0cubG9nKExldmVsLldBUk5JTkcsICJFbmNv dW50ZXJlZCBkZWxldGVkIG9iamVjdCBkdXJpbmcgZGVsZXRlIG9mICINCiAgICAgICAgICAgICAg ICAgICAgICsgbW9kZWxFbGVtZW50KTsNCiAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICB9 DQpAQCAtMTY4LDE5ICsxNzAsMTkgQEANCiAgICAgcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2Uo UHJvcGVydHlDaGFuZ2VFdmVudCBldnQpIHsNCiAgICAgICAgIGlmIChyZW5kZXJlciAhPSBudWxs KSB7DQogICAgICAgICAgICAgT2JqZWN0IG93bmVyID0gcmVuZGVyZXIuZ2V0T3duZXIodGhpcyk7 DQotICAgICAgICAgICAgaWYgKChvd25lciA9PSBldnQuZ2V0U291cmNlKCkpIA0KKyAgICAgICAg ICAgIGlmICgob3duZXIgPT0gZXZ0LmdldFNvdXJjZSgpKQ0KICAgICAgICAgICAgICAgICAgICAg JiYgKGV2dCBpbnN0YW5jZW9mIERlbGV0ZUluc3RhbmNlRXZlbnQpKSB7DQogICAgICAgICAgICAg ICAgIHJldHVybjsNCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgaWYgKG93bmVyICE9IG51 bGwpIHsNCiAgICAgICAgICAgICAgICAgaWYgKE1vZGVsLmdldFVtbEZhY3RvcnkoKS5pc1JlbW92 ZWQob3duZXIpKSB7DQotICAgICAgICAgICAgICAgICAgICBMT0cud2FybigiRW5jb3VudGVyZWQg ZGVsZXRlZCBvYmplY3QgZHVyaW5nIGRlbGV0ZSBvZiAiIA0KKyAgICAgICAgICAgICAgICAgICAg TE9HLmxvZyhMZXZlbC5XQVJOSU5HLCAiRW5jb3VudGVyZWQgZGVsZXRlZCBvYmplY3QgZHVyaW5n IGRlbGV0ZSBvZiAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgb3duZXIpOw0KICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg ICAgICAgIHJlbmRlcmVyLm5vdGF0aW9uUmVuZGVyaW5nQ2hhbmdlZCh0aGlzLA0KICAgICAgICAg ICAgICAgICAgICAgICAgIHRvU3RyaW5nKG93bmVyLCByZW5kZXJlci5nZXROb3RhdGlvblNldHRp bmdzKHRoaXMpKSk7DQotICAgICAgICAgICAgICAgIGlmIChldnQgaW5zdGFuY2VvZiBBZGRBc3Nv Y2lhdGlvbkV2ZW50IA0KKyAgICAgICAgICAgICAgICBpZiAoZXZ0IGluc3RhbmNlb2YgQWRkQXNz b2NpYXRpb25FdmVudA0KICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGV2dCBpbnN0YW5jZW9m IFJlbW92ZUFzc29jaWF0aW9uRXZlbnQpIHsNCiAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxp c2VMaXN0ZW5lcihvd25lcik7DQogICAgICAgICAgICAgICAgIH0NCkBAIC0xOTAsMTUgKzE5Miwx NSBAQA0KIA0KICAgICAvKg0KICAgICAgKiBBZGQgYW4gZWxlbWVudCBsaXN0ZW5lciBhbmQgcmVt ZW1iZXIgdGhlIHJlZ2lzdHJhdGlvbi4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJh bSBlbGVtZW50DQogICAgICAqICAgICAgICAgICAgZWxlbWVudCB0byBsaXN0ZW4gZm9yIGNoYW5n ZXMgb24NCiAgICAgICogQHNlZSBvcmcuYXJnb3VtbC5tb2RlbC5Nb2RlbEV2ZW50UHVtcCNhZGRN b2RlbEV2ZW50TGlzdGVuZXIoUHJvcGVydHlDaGFuZ2VMaXN0ZW5lciwgT2JqZWN0LCBTdHJpbmcp DQogICAgICAqLw0KLSAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBhZGRFbGVtZW50TGlzdGVuZXIo UHJvcGVydHlDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciwgDQorICAgIHByb3RlY3RlZCBmaW5hbCB2 b2lkIGFkZEVsZW1lbnRMaXN0ZW5lcihQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyIGxpc3RlbmVyLA0K ICAgICAgICAgICAgIE9iamVjdCBlbGVtZW50KSB7DQogICAgICAgICBpZiAoTW9kZWwuZ2V0VW1s RmFjdG9yeSgpLmlzUmVtb3ZlZChlbGVtZW50KSkgew0KLSAgICAgICAgICAgIExPRy53YXJuKCJF bmNvdW50ZXJlZCBkZWxldGVkIG9iamVjdCBkdXJpbmcgZGVsZXRlIG9mICIgKyBlbGVtZW50KTsN CisgICAgICAgICAgICBMT0cubG9nKExldmVsLldBUk5JTkcsICJFbmNvdW50ZXJlZCBkZWxldGVk IG9iamVjdCBkdXJpbmcgZGVsZXRlIG9mICIgKyBlbGVtZW50KTsNCiAgICAgICAgICAgICByZXR1 cm47DQogICAgICAgICB9DQogICAgICAgICBPYmplY3RbXSBlbnRyeSA9IG5ldyBPYmplY3RbXSB7 ZWxlbWVudCwgbnVsbH07DQpAQCAtMjA2LDI1ICsyMDgsMjUgQEANCiAgICAgICAgICAgICBsaXN0 ZW5lcnMuYWRkKGVudHJ5KTsNCiAgICAgICAgICAgICBNb2RlbC5nZXRQdW1wKCkuYWRkTW9kZWxF dmVudExpc3RlbmVyKGxpc3RlbmVyLCBlbGVtZW50KTsNCiAgICAgICAgIH0gZWxzZSB7DQotICAg ICAgICAgICAgTE9HLndhcm4oIkF0dGVtcHRlZCBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uIG9mIGV2 ZW50IGxpc3RlbmVyIg0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuV0FSTklORywgIkF0dGVt cHRlZCBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uIG9mIGV2ZW50IGxpc3RlbmVyIg0KICAgICAgICAg ICAgICAgICAgICAgKyAiIC0gRWxlbWVudDogIiArIGVsZW1lbnQgKyAiIExpc3RlbmVyOiAiICsg bGlzdGVuZXIpOw0KICAgICAgICAgfQ0KICAgICB9DQotICAgIA0KKw0KICAgICAvKioNCi0gICAg ICogVXRpbGl0eSBmdW5jdGlvbiB0byBhZGQgYSBsaXN0ZW5lciBmb3IgYW4gYXJyYXkgb2YgcHJv cGVydHkgbmFtZXMgDQorICAgICAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gYWRkIGEgbGlzdGVuZXIg Zm9yIGFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzDQogICAgICAqIGFuZCByZW1lbWJlciB0aGUg cmVnaXN0cmF0aW9uLg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIGVsZW1lbnQg ZWxlbWVudCB0byBsaXN0ZW4gZm9yIGNoYW5nZXMgb24NCiAgICAgICovDQogICAgIHB1YmxpYyBm aW5hbCB2b2lkIGFkZEVsZW1lbnRMaXN0ZW5lcihPYmplY3QgZWxlbWVudCkgew0KICAgICAgICAg YWRkRWxlbWVudExpc3RlbmVyKHRoaXMsIGVsZW1lbnQpOw0KICAgICB9DQotICAgIA0KKw0KICAg ICAvKg0KLSAgICAgKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGFkZCBhIGxpc3RlbmVyIGZvciBhIGdp dmVuIHByb3BlcnR5IG5hbWUgDQorICAgICAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gYWRkIGEgbGlz dGVuZXIgZm9yIGEgZ2l2ZW4gcHJvcGVydHkgbmFtZQ0KICAgICAgKiBhbmQgcmVtZW1iZXIgdGhl IHJlZ2lzdHJhdGlvbi4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBlbGVtZW50 DQogICAgICAqICAgICAgICAgICAgZWxlbWVudCB0byBsaXN0ZW4gZm9yIGNoYW5nZXMgb24NCiAg ICAgICogQHBhcmFtIHByb3BlcnR5DQpAQCAtMjMyLDEwICsyMzQsMTAgQEANCiAgICAgICogQHNl ZSBvcmcuYXJnb3VtbC5tb2RlbC5Nb2RlbEV2ZW50UHVtcCNhZGRNb2RlbEV2ZW50TGlzdGVuZXIo UHJvcGVydHlDaGFuZ2VMaXN0ZW5lciwNCiAgICAgICogICAgICBPYmplY3QsIFN0cmluZykNCiAg ICAgICovDQotICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIGFkZEVsZW1lbnRMaXN0ZW5lcihQcm9w ZXJ0eUNoYW5nZUxpc3RlbmVyIGxpc3RlbmVyLCANCisgICAgcHJvdGVjdGVkIGZpbmFsIHZvaWQg YWRkRWxlbWVudExpc3RlbmVyKFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIsDQogICAg ICAgICAgICAgT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkgew0KICAgICAgICAgaWYg KE1vZGVsLmdldFVtbEZhY3RvcnkoKS5pc1JlbW92ZWQoZWxlbWVudCkpIHsNCi0gICAgICAgICAg ICBMT0cud2FybigiRW5jb3VudGVyZWQgZGVsZXRlZCBvYmplY3QgZHVyaW5nIGRlbGV0ZSBvZiAi ICsgZWxlbWVudCk7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5XQVJOSU5HLCAiRW5jb3Vu dGVyZWQgZGVsZXRlZCBvYmplY3QgZHVyaW5nIGRlbGV0ZSBvZiAiICsgZWxlbWVudCk7DQogICAg ICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgfQ0KICAgICAgICAgT2JqZWN0W10gZW50cnkgPSBu ZXcgT2JqZWN0W10ge2VsZW1lbnQsIHByb3BlcnR5fTsNCkBAIC0yNDMsMTUgKzI0NSwxNSBAQA0K ICAgICAgICAgICAgIGxpc3RlbmVycy5hZGQoZW50cnkpOw0KICAgICAgICAgICAgIE1vZGVsLmdl dFB1bXAoKS5hZGRNb2RlbEV2ZW50TGlzdGVuZXIobGlzdGVuZXIsIGVsZW1lbnQsIHByb3BlcnR5 KTsNCiAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgTE9HLmRlYnVnKCJBdHRlbXB0ZWQg ZHVwbGljYXRlIHJlZ2lzdHJhdGlvbiBvZiBldmVudCBsaXN0ZW5lciINCi0gICAgICAgICAgICAg ICAgICAgICsgIiAtIEVsZW1lbnQ6ICIgKyBlbGVtZW50ICsgIiBMaXN0ZW5lcjogIiArIGxpc3Rl bmVyKTsNCisgICAgICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJBdHRlbXB0ZWQgZHVwbGlj YXRlIHJlZ2lzdHJhdGlvbiBvZiBldmVudCBsaXN0ZW5lciINCisgICAgICAgICAgICAgICAgICAg ICsgIiAtIEVsZW1lbnQ6IHswfSBMaXN0ZW5lcjogezF9IiwgbmV3IE9iamVjdFtde2VsZW1lbnQs IGxpc3RlbmVyfSk7DQogICAgICAgICB9DQogICAgIH0NCi0gICAgDQorDQogICAgIC8qKg0KLSAg ICAgKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGFkZCBhIGxpc3RlbmVyIGZvciBhbiBhcnJheSBvZiBw cm9wZXJ0eSBuYW1lcyANCisgICAgICogVXRpbGl0eSBmdW5jdGlvbiB0byBhZGQgYSBsaXN0ZW5l ciBmb3IgYW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMNCiAgICAgICogYW5kIHJlbWVtYmVyIHRo ZSByZWdpc3RyYXRpb24uDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAcGFyYW0gZWxlbWVu dCBlbGVtZW50IHRvIGxpc3RlbiBmb3IgY2hhbmdlcyBvbg0KICAgICAgKiBAcGFyYW0gcHJvcGVy dHkgbmFtZSBvZiBwcm9wZXJ0eSB0byBsaXN0ZW4gZm9yIGNoYW5nZXMgb2YNCiAgICAgICovDQpA QCAtMjYwLDkgKzI2Miw5IEBADQogICAgIH0NCiANCiAgICAgLyoNCi0gICAgICogVXRpbGl0eSBm dW5jdGlvbiB0byBhZGQgYSBsaXN0ZW5lciBmb3IgYW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMg DQorICAgICAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gYWRkIGEgbGlzdGVuZXIgZm9yIGFuIGFycmF5 IG9mIHByb3BlcnR5IG5hbWVzDQogICAgICAqIGFuZCByZW1lbWJlciB0aGUgcmVnaXN0cmF0aW9u Lg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIGVsZW1lbnQNCiAgICAgICogICAg ICAgICAgICBlbGVtZW50IHRvIGxpc3RlbiBmb3IgY2hhbmdlcyBvbg0KICAgICAgKiBAcGFyYW0g cHJvcGVydHkNCkBAIC0yNzAsMTAgKzI3MiwxMCBAQA0KICAgICAgKiBAc2VlIG9yZy5hcmdvdW1s Lm1vZGVsLk1vZGVsRXZlbnRQdW1wI2FkZE1vZGVsRXZlbnRMaXN0ZW5lcihQcm9wZXJ0eUNoYW5n ZUxpc3RlbmVyLA0KICAgICAgKiAgICAgIE9iamVjdCwgU3RyaW5nKQ0KICAgICAgKi8NCi0gICAg cHJvdGVjdGVkIGZpbmFsIHZvaWQgYWRkRWxlbWVudExpc3RlbmVyKFByb3BlcnR5Q2hhbmdlTGlz dGVuZXIgbGlzdGVuZXIsIA0KKyAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBhZGRFbGVtZW50TGlz dGVuZXIoUHJvcGVydHlDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciwNCiAgICAgICAgICAgICBPYmpl Y3QgZWxlbWVudCwgU3RyaW5nW10gcHJvcGVydHkpIHsNCiAgICAgICAgIGlmIChNb2RlbC5nZXRV bWxGYWN0b3J5KCkuaXNSZW1vdmVkKGVsZW1lbnQpKSB7DQotICAgICAgICAgICAgTE9HLndhcm4o IkVuY291bnRlcmVkIGRlbGV0ZWQgb2JqZWN0IGR1cmluZyBkZWxldGUgb2YgIiArIGVsZW1lbnQp Ow0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuV0FSTklORywgIkVuY291bnRlcmVkIGRlbGV0 ZWQgb2JqZWN0IGR1cmluZyBkZWxldGUgb2YgIiArIGVsZW1lbnQpOw0KICAgICAgICAgICAgIHJl dHVybjsNCiAgICAgICAgIH0NCiAgICAgICAgIE9iamVjdFtdIGVudHJ5ID0gbmV3IE9iamVjdFtd IHtlbGVtZW50LCBwcm9wZXJ0eX07DQpAQCAtMjgxLDUxICsyODMsNTIgQEANCiAgICAgICAgICAg ICBsaXN0ZW5lcnMuYWRkKGVudHJ5KTsNCiAgICAgICAgICAgICBNb2RlbC5nZXRQdW1wKCkuYWRk TW9kZWxFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBlbGVtZW50LCBwcm9wZXJ0eSk7DQogICAgICAg ICB9IGVsc2Ugew0KLSAgICAgICAgICAgIExPRy5kZWJ1ZygiQXR0ZW1wdGVkIGR1cGxpY2F0ZSBy ZWdpc3RyYXRpb24gb2YgZXZlbnQgbGlzdGVuZXIiDQorICAgICAgICAgICAgTE9HLmxvZyhMZXZl bC5GSU5FLA0KKyAgICAgICAgICAgICAgICAgICAgIkF0dGVtcHRlZCBkdXBsaWNhdGUgcmVnaXN0 cmF0aW9uIG9mIGV2ZW50IGxpc3RlbmVyIg0KICAgICAgICAgICAgICAgICAgICAgKyAiIC0gRWxl bWVudDogIiArIGVsZW1lbnQgKyAiIExpc3RlbmVyOiAiICsgbGlzdGVuZXIpOw0KICAgICAgICAg fQ0KICAgICB9DQotICAgIA0KKw0KICAgICAvKioNCi0gICAgICogVXRpbGl0eSBmdW5jdGlvbiB0 byBhZGQgYSBsaXN0ZW5lciBmb3IgYW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgDQorICAgICAq IFV0aWxpdHkgZnVuY3Rpb24gdG8gYWRkIGEgbGlzdGVuZXIgZm9yIGFuIGFycmF5IG9mIHByb3Bl cnR5IG5hbWVzDQogICAgICAqIGFuZCByZW1lbWJlciB0aGUgcmVnaXN0cmF0aW9uLg0KLSAgICAg KiANCisgICAgICoNCiAgICAgICogQHBhcmFtIGVsZW1lbnQgZWxlbWVudCB0byBsaXN0ZW4gZm9y IGNoYW5nZXMgb24NCi0gICAgICogQHBhcmFtIHByb3BlcnR5IGFycmF5IG9mIHByb3BlcnR5IG5h bWVzIChTdHJpbmdzKSANCisgICAgICogQHBhcmFtIHByb3BlcnR5IGFycmF5IG9mIHByb3BlcnR5 IG5hbWVzIChTdHJpbmdzKQ0KICAgICAgKiB0byBsaXN0ZW4gZm9yIGNoYW5nZXMgb2YNCiAgICAg ICovDQogICAgIHB1YmxpYyBmaW5hbCB2b2lkIGFkZEVsZW1lbnRMaXN0ZW5lcihPYmplY3QgZWxl bWVudCwgU3RyaW5nW10gcHJvcGVydHkpIHsNCiAgICAgICAgIGFkZEVsZW1lbnRMaXN0ZW5lcih0 aGlzLCBlbGVtZW50LCBwcm9wZXJ0eSk7DQogICAgIH0NCi0gICAgDQorDQogICAgIC8qDQotICAg ICAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gcmVtb3ZlIGFuIGVsZW1lbnQgbGlzdGVuZXIgDQorICAg ICAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gcmVtb3ZlIGFuIGVsZW1lbnQgbGlzdGVuZXINCiAgICAg ICogYW5kIGFkYXB0IHRoZSByZW1lbWJlcmVkIGxpc3Qgb2YgcmVnaXN0cmF0aW9uLg0KLSAgICAg KiANCisgICAgICoNCiAgICAgICogQHBhcmFtIGVsZW1lbnQNCiAgICAgICogICAgICAgICAgICBl bGVtZW50IHRvIGxpc3RlbiBmb3IgY2hhbmdlcyBvbg0KICAgICAgKiBAc2VlIG9yZy5hcmdvdW1s Lm1vZGVsLk1vZGVsRXZlbnRQdW1wI2FkZE1vZGVsRXZlbnRMaXN0ZW5lcihQcm9wZXJ0eUNoYW5n ZUxpc3RlbmVyLCBPYmplY3QsIFN0cmluZykNCiAgICAgICovDQotICAgIHByb3RlY3RlZCBmaW5h bCB2b2lkIHJlbW92ZUVsZW1lbnRMaXN0ZW5lcihQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyIGxpc3Rl bmVyLCANCisgICAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgcmVtb3ZlRWxlbWVudExpc3RlbmVyKFBy b3BlcnR5Q2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIsDQogICAgICAgICAgICAgT2JqZWN0IGVsZW1l bnQpIHsNCiAgICAgICAgIGxpc3RlbmVycy5yZW1vdmUobmV3IE9iamVjdFtdIHtlbGVtZW50LCBu dWxsfSk7DQogICAgICAgICBNb2RlbC5nZXRQdW1wKCkucmVtb3ZlTW9kZWxFdmVudExpc3RlbmVy KGxpc3RlbmVyLCBlbGVtZW50KTsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgLyoqDQotICAgICAq IFV0aWxpdHkgZnVuY3Rpb24gdG8gcmVtb3ZlIGFuIGVsZW1lbnQgbGlzdGVuZXIgDQorICAgICAq IFV0aWxpdHkgZnVuY3Rpb24gdG8gcmVtb3ZlIGFuIGVsZW1lbnQgbGlzdGVuZXINCiAgICAgICog YW5kIGFkYXB0IHRoZSByZW1lbWJlcmVkIGxpc3Qgb2YgcmVnaXN0cmF0aW9uLg0KLSAgICAgKiAN CisgICAgICoNCiAgICAgICogQHBhcmFtIGVsZW1lbnQgZWxlbWVudCB0byBsaXN0ZW4gZm9yIGNo YW5nZXMgb24NCiAgICAgICovDQogICAgIHB1YmxpYyBmaW5hbCB2b2lkIHJlbW92ZUVsZW1lbnRM aXN0ZW5lcihPYmplY3QgZWxlbWVudCkgew0KICAgICAgICAgcmVtb3ZlRWxlbWVudExpc3RlbmVy KHRoaXMsIGVsZW1lbnQpOw0KICAgICB9DQotICAgIA0KKw0KICAgICAvKg0KLSAgICAgKiBVdGls aXR5IGZ1bmN0aW9uIHRvIHVucmVnaXN0ZXIgYWxsIGxpc3RlbmVycyANCisgICAgICogVXRpbGl0 eSBmdW5jdGlvbiB0byB1bnJlZ2lzdGVyIGFsbCBsaXN0ZW5lcnMNCiAgICAgICogcmVnaXN0ZXJl ZCB0aHJvdWdoIGFkZEVsZW1lbnRMaXN0ZW5lci4NCi0gICAgICogDQorICAgICAqDQogICAgICAq IEBzZWUgI2FkZEVsZW1lbnRMaXN0ZW5lcihPYmplY3QsIFN0cmluZykNCiAgICAgICovDQogICAg IHByb3RlY3RlZCBmaW5hbCB2b2lkIHJlbW92ZUFsbEVsZW1lbnRMaXN0ZW5lcnMoDQpAQCAtMzQ3 LDkgKzM1MCw5IEBADQogICAgICAgICB9DQogICAgICAgICBsaXN0ZW5lcnMuY2xlYXIoKTsNCiAg ICAgfQ0KLSAgICANCisNCiAgICAgLyoqDQotICAgICAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gdW5y ZWdpc3RlciBhbGwgbGlzdGVuZXJzIA0KKyAgICAgKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIHVucmVn aXN0ZXIgYWxsIGxpc3RlbmVycw0KICAgICAgKiByZWdpc3RlcmVkIHRocm91Z2ggYWRkRWxlbWVu dExpc3RlbmVyLg0KICAgICAgKi8NCiAgICAgcHVibGljIGZpbmFsIHZvaWQgcmVtb3ZlQWxsRWxl bWVudExpc3RlbmVycygpIHsNCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMv b3JnL2FyZ291bWwvbm90YXRpb24vTm90YXRpb25Qcm92aWRlckZhY3RvcnkyLmphdmENClVybDog aHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3Jj L2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9ub3RhdGlvbi9Ob3RhdGlvblByb3ZpZGVyRmFj dG9yeTIuamF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJn b3VtbC9ub3RhdGlvbi9Ob3RhdGlvblByb3ZpZGVyRmFjdG9yeTIuamF2YQkob3JpZ2luYWwpDQor KysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9ub3RhdGlvbi9Ob3RhdGlv blByb3ZpZGVyRmFjdG9yeTIuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYg KzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQg KGMpIDIwMDktMjAxMCBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMp IDIwMDktMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2Vy dmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJl IG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGlj ZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBp cyBhdmFpbGFibGUgYXQNCkBAIC00MiwyMSArNDIsMjEgQEANCiBpbXBvcnQgamF2YS5sYW5nLnJl ZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsNCiBpbXBvcnQgamF2YS51dGlsLkhhc2hN YXA7DQogaW1wb3J0IGphdmEudXRpbC5NYXA7DQotDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGou TG9nZ2VyOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51 dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KIA0KIC8qKg0KLSAqICBUaGUgTm90YXRpb25Qcm92aWRlckZh Y3RvcnkyIGlzIGEgc2luZ2xldG9uLCANCi0gKiAgc2luY2UgaXQgaXMgdGhlIGFjY2Vzc3BvaW50 IGZvciBhbGwgRmlncyANCi0gKiAgdG8gYWNjZXNzIHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9u IG9mIG1vZGVsb2JqZWN0cywgDQorICogIFRoZSBOb3RhdGlvblByb3ZpZGVyRmFjdG9yeTIgaXMg YSBzaW5nbGV0b24sDQorICogIHNpbmNlIGl0IGlzIHRoZSBhY2Nlc3Nwb2ludCBmb3IgYWxsIEZp Z3MNCisgKiAgdG8gYWNjZXNzIHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIG1vZGVsb2Jq ZWN0cywNCiAgKiAgYW5kIHNpbmNlIHBsdWdpbiBtb2R1bGVzIGNhbiBhZGQgZXh0cmEgbGFuZ3Vh Z2VzLg0KLSAqICANCisgKg0KICAqIEBhdXRob3IgTWljaGllbA0KICAqLw0KIHB1YmxpYyBmaW5h bCBjbGFzcyBOb3RhdGlvblByb3ZpZGVyRmFjdG9yeTIgew0KIA0KLSAgICBwcml2YXRlIHN0YXRp YyBmaW5hbCBMb2dnZXIgTE9HID0gDQotICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKE5vdGF0aW9u UHJvdmlkZXJGYWN0b3J5Mi5jbGFzcyk7DQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dl ciBMT0cgPQ0KKyAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihOb3RhdGlvblByb3ZpZGVyRmFjdG9y eTIuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgLyoqDQogICAgICAqIFRZUEVfTkFNRSB0aGUg bmFtZSBvZiB0aGUgbW9kZWxlbGVtZW50LCBlLmcuIGNsYXNzLCBwYWNrYWdlLCBzdGF0ZQ0KQEAg LTEwMiwzMyArMTAyLDMzIEBADQogICAgICAqIFRZUEVfTk9ERUlOU1RBTkNFIHRoZSB0ZXh0IHNo b3duIG9uIGEgY29tcG9uZW50SW5zdGFuY2UuDQogICAgICAqLw0KICAgICBwdWJsaWMgc3RhdGlj IGZpbmFsIGludCBUWVBFX05PREVJTlNUQU5DRSA9IDk7DQotICAgIA0KKw0KICAgICAvKioNCi0g ICAgICogVFlQRV9UWVBFX09CSkVDVEZMT1dTVEFURV9UWVBFIHRoZSB0ZXh0IHNob3duIG9uIGEg DQorICAgICAqIFRZUEVfVFlQRV9PQkpFQ1RGTE9XU1RBVEVfVFlQRSB0aGUgdGV4dCBzaG93biBv biBhDQogICAgICAqIG9iamVjdGZsb3dzdGF0ZSdzIHR5cGUsIGkuZS4gaXRzIGNsYXNzaWZpZXIg bmFtZS4NCiAgICAgICovDQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVfT0JKRUNU RkxPV1NUQVRFX1RZUEUgPSAxMDsNCiANCiAgICAgLyoqDQotICAgICAqIFRZUEVfT0JKRUNURkxP V1NUQVRFX1NUQVRFIHRoZSB0ZXh0IHNob3duIG9uIGEgDQorICAgICAqIFRZUEVfT0JKRUNURkxP V1NUQVRFX1NUQVRFIHRoZSB0ZXh0IHNob3duIG9uIGENCiAgICAgICogb2JqZWN0Zmxvd3N0YXRl J3Mgc3RhdGUuDQogICAgICAqLw0KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX09C SkVDVEZMT1dTVEFURV9TVEFURSA9IDExOw0KIA0KICAgICAvKioNCi0gICAgICogVFlQRV9DQUxM U1RBVEUgdGhlIHRleHQgc2hvd24gb24gYSANCisgICAgICogVFlQRV9DQUxMU1RBVEUgdGhlIHRl eHQgc2hvd24gb24gYQ0KICAgICAgKiBjYWxsc3RhdGUncyBzdGF0ZS4NCiAgICAgICovDQogICAg IHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVfQ0FMTFNUQVRFID0gMTI7DQogDQogICAgIC8q Kg0KLSAgICAgKiBUWVBFX0NMQVNTSUZJRVJST0xFIHRoZSB0ZXh0IHNob3duIG9uIGEgDQorICAg ICAqIFRZUEVfQ0xBU1NJRklFUlJPTEUgdGhlIHRleHQgc2hvd24gb24gYQ0KICAgICAgKiBjbGFz c2lmaWVycm9sZS4NCiAgICAgICovDQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVf Q0xBU1NJRklFUlJPTEUgPSAxMzsNCi0gICAgDQorDQogICAgIC8qKg0KLSAgICAgKiBUWVBFX01F U1NBR0UgdGhlIHRleHQgc2hvd24gb24gYSBNZXNzYWdlIA0KKyAgICAgKiBUWVBFX01FU1NBR0Ug dGhlIHRleHQgc2hvd24gb24gYSBNZXNzYWdlDQogICAgICAqIGluIGEgQ29sbGFib3JhdGlvbnMg ZGlhZ3JhbS4NCiAgICAgICovDQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVfTUVT U0FHRSA9IDE0Ow0KQEAgLTE2NSw3ICsxNjUsNyBAQA0KICAgICBwdWJsaWMgc3RhdGljIGZpbmFs IGludCBUWVBFX0VOVU1FUkFUSU9OX0xJVEVSQUwgPSAyMDsNCiANCiAgICAgLyoqDQotICAgICAq IFRZUEVfTUVTU0FHRSB0aGUgdGV4dCBzaG93biBvbiBhIE1lc3NhZ2UgDQorICAgICAqIFRZUEVf TUVTU0FHRSB0aGUgdGV4dCBzaG93biBvbiBhIE1lc3NhZ2UNCiAgICAgICogaW4gYSBDb2xsYWJv cmF0aW9ucyBkaWFncmFtLg0KICAgICAgKi8NCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQg VFlQRV9TRF9NRVNTQUdFID0gMjE7DQpAQCAtMjA5LDEyICsyMDksMTIgQEANCiAgICAgICogR2V0 IGEgTm90YXRpb25Qcm92aWRlciBmb3IgdGhlIGN1cnJlbnQgcHJvamVjdC4NCiAgICAgICogPHA+ DQogICAgICAqIElmIHRoZXJlIGlzIGFueSByZWFzb24gZm9yIGZhaWx1cmUsIG51bGwgaXMgcmV0 dXJuZWQgLSBubw0KLSAgICAgKiBleGNlcHRpb24gaXMgdGhyb3duLiANCisgICAgICogZXhjZXB0 aW9uIGlzIHRocm93bi4NCiAgICAgICogVGhlIGNhbGxlciBpcyBzdXBwb3NlZCB0byBkZWFsIHdp dGggcmVjZWl2aW5nIG51bGwuDQogICAgICAqIDxwPg0KLSAgICAgKiBVc2UgdGhpcyBmdW5jdGlv biB3aGVuIHlvdSBkbyBub3Qgd2FudCB0byBtb25pdG9yIG1vZGVsIA0KKyAgICAgKiBVc2UgdGhp cyBmdW5jdGlvbiB3aGVuIHlvdSBkbyBub3Qgd2FudCB0byBtb25pdG9yIG1vZGVsDQogICAgICAq IGNoYW5nZXMgd2hpY2ggbWF5IGNhdXNlIHRoZSBzdHJpbmcgdG8gY2hhbmdlLg0KLSAgICAgKiAN CisgICAgICoNCiAgICAgICogQHBhcmFtIHR5cGUgdGhlIHByb3ZpZGVyIHR5cGUNCiAgICAgICog QHBhcmFtIG9iamVjdCB0aGUgY29uc3RydWN0b3IgcGFyYW1ldGVyDQogICAgICAqIEBwYXJhbSBu YW1lIHRoZSBuYW1lIG9mIHRoZSBub3RhdGlvbiBsYW5ndWFnZSB0byB1c2UNCkBAIC0yMzUsMzkg KzIzNSwzOSBAQA0KICAgICAgICAgICAgIH0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpIHsN CiAgICAgICAgICAgICAgICAgLy8gVE9ETzogV2h5IGFyZW4ndCB3ZSB0aHJvd2luZyBhbiBleGNl cHRpb24gaGVyZT8NCiAgICAgICAgICAgICAJLy8gUmV0dXJuaW5nIG51bGwgcmVzdWx0cyBpbiBO UEUgYW5kIG5vIGV4cGxhbmF0aW9uIHdoeS4NCi0gICAgICAgICAgICAgICAgTE9HLmVycm9yKCJF eGNlcHRpb24gY2F1Z2h0IiwgZSk7DQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VW RVJFLCAiRXhjZXB0aW9uIGNhdWdodCIsIGUpOw0KICAgICAgICAgICAgIH0gY2F0Y2ggKE5vU3Vj aE1ldGhvZEV4Y2VwdGlvbiBlKSB7DQogICAgICAgICAgICAgICAgIC8vIFRPRE86IFdoeSBhcmVu J3Qgd2UgdGhyb3dpbmcgYW4gZXhjZXB0aW9uIGhlcmU/DQogICAgICAgICAgICAgCS8vIFJldHVy bmluZyBudWxsIHJlc3VsdHMgaW4gTlBFIGFuZCBubyBleHBsYW5hdGlvbiB3aHkuDQotICAgICAg ICAgICAgICAgIExPRy5lcnJvcigiRXhjZXB0aW9uIGNhdWdodCIsIGUpOw0KKyAgICAgICAgICAg ICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwgIkV4Y2VwdGlvbiBjYXVnaHQiLCBlKTsNCiAgICAg ICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgew0KICAgICAgICAg ICAgICAgICAvLyBUT0RPOiBXaHkgYXJlbid0IHdlIHRocm93aW5nIGFuIGV4Y2VwdGlvbiBoZXJl Pw0KICAgICAgICAgICAgIAkvLyBSZXR1cm5pbmcgbnVsbCByZXN1bHRzIGluIE5QRSBhbmQgbm8g ZXhwbGFuYXRpb24gd2h5Lg0KLSAgICAgICAgICAgICAgICBMT0cuZXJyb3IoIkV4Y2VwdGlvbiBj YXVnaHQiLCBlKTsNCisgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsICJFeGNl cHRpb24gY2F1Z2h0IiwgZSk7DQogICAgICAgICAgICAgfSBjYXRjaCAoSW5zdGFudGlhdGlvbkV4 Y2VwdGlvbiBlKSB7DQogICAgICAgICAgICAgICAgIC8vIFRPRE86IFdoeSBhcmVuJ3Qgd2UgdGhy b3dpbmcgYW4gZXhjZXB0aW9uIGhlcmU/DQogICAgICAgICAgICAgCS8vIFJldHVybmluZyBudWxs IHJlc3VsdHMgaW4gTlBFIGFuZCBubyBleHBsYW5hdGlvbiB3aHkuDQotICAgICAgICAgICAgICAg IExPRy5lcnJvcigiRXhjZXB0aW9uIGNhdWdodCIsIGUpOw0KKyAgICAgICAgICAgICAgICBMT0cu bG9nKExldmVsLlNFVkVSRSwgIkV4Y2VwdGlvbiBjYXVnaHQiLCBlKTsNCiAgICAgICAgICAgICB9 IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsNCiAgICAgICAgICAgICAgICAgLy8g VE9ETzogV2h5IGFyZW4ndCB3ZSB0aHJvd2luZyBhbiBleGNlcHRpb24gaGVyZT8NCiAgICAgICAg ICAgICAJLy8gUmV0dXJuaW5nIG51bGwgcmVzdWx0cyBpbiBOUEUgYW5kIG5vIGV4cGxhbmF0aW9u IHdoeS4NCi0gICAgICAgICAgICAgICAgTE9HLmVycm9yKCJFeGNlcHRpb24gY2F1Z2h0IiwgZSk7 DQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiRXhjZXB0aW9uIGNhdWdo dCIsIGUpOw0KICAgICAgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24g ZSkgew0KICAgICAgICAgICAgICAgICAvLyBUT0RPOiBXaHkgYXJlbid0IHdlIHRocm93aW5nIGFu IGV4Y2VwdGlvbiBoZXJlPw0KICAgICAgICAgICAgIAkvLyBSZXR1cm5pbmcgbnVsbCByZXN1bHRz IGluIE5QRSBhbmQgbm8gZXhwbGFuYXRpb24gd2h5Lg0KLSAgICAgICAgICAgICAgICBMT0cuZXJy b3IoIkV4Y2VwdGlvbiBjYXVnaHQiLCBlKTsNCisgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZl bC5TRVZFUkUsICJFeGNlcHRpb24gY2F1Z2h0IiwgZSk7DQogICAgICAgICAgICAgfQ0KICAgICAg ICAgfQ0KICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgIH0NCiANCiAgICAgLyoqDQotICAgICAq IEdldCBhIE5vdGF0aW9uUHJvdmlkZXIgZm9yIHRoZSBjdXJyZW50IHByb2plY3QuIA0KKyAgICAg KiBHZXQgYSBOb3RhdGlvblByb3ZpZGVyIGZvciB0aGUgY3VycmVudCBwcm9qZWN0Lg0KICAgICAg KiBUaGlzIGFsc28gaW5pdGlhbGl6ZXMgdGhlIGxpc3RlbmVycy4NCiAgICAgICogPHA+DQotICAg ICAqIFVzZSB0aGlzIGZ1bmN0aW9uIHdoZW4geW91IHdhbnQgdG8gbW9uaXRvciBtb2RlbCANCisg ICAgICogVXNlIHRoaXMgZnVuY3Rpb24gd2hlbiB5b3Ugd2FudCB0byBtb25pdG9yIG1vZGVsDQog ICAgICAqIGNoYW5nZXMgd2hpY2ggbWF5IGNhdXNlIHRoZSBzdHJpbmcgdG8gY2hhbmdlLg0KLSAg ICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIHR5cGUgdGhlIHByb3ZpZGVyIHR5cGUNCiAg ICAgICogQHBhcmFtIG9iamVjdCB0aGUgY29uc3RydWN0b3IgcGFyYW1ldGVyDQogICAgICAqIEBw YXJhbSBuciB0aGUgZmlnIHRoYXQgcmVmcmVzaGVzIGFmdGVyIHRoZSBOb3RhdGlvblByb3ZpZGVy IGhhcyBjaGFuZ2VkDQpAQCAtMjc1LDcgKzI3NSw3IEBADQogICAgICAqIEByZXR1cm4gdGhlIHBy b3ZpZGVyDQogICAgICAqLw0KICAgICBwdWJsaWMgTm90YXRpb25Qcm92aWRlciBnZXROb3RhdGlv blByb3ZpZGVyKGludCB0eXBlLA0KLSAgICAgICAgICAgIE9iamVjdCBvYmplY3QsIE5vdGF0aW9u UmVuZGVyZXIgbnIsIA0KKyAgICAgICAgICAgIE9iamVjdCBvYmplY3QsIE5vdGF0aW9uUmVuZGVy ZXIgbnIsDQogICAgICAgICAgICAgTm90YXRpb25OYW1lIG5hbWUpIHsNCiANCiAgICAgICAgIE5v dGF0aW9uUHJvdmlkZXIgcCA9IGdldE5vdGF0aW9uUHJvdmlkZXIodHlwZSwgb2JqZWN0LCBuYW1l KTsNCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvbm90 YXRpb24vcHJvdmlkZXJzL2phdmEvT3BlcmF0aW9uTm90YXRpb25KYXZhLmphdmENClVybDogaHR0 cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2Fy Z291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9ub3RhdGlvbi9wcm92aWRlcnMvamF2YS9PcGVyYXRp b25Ob3RhdGlvbkphdmEuamF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0x OTkwNw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3Ny Yy9vcmcvYXJnb3VtbC9ub3RhdGlvbi9wcm92aWRlcnMvamF2YS9PcGVyYXRpb25Ob3RhdGlvbkph dmEuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJn b3VtbC9ub3RhdGlvbi9wcm92aWRlcnMvamF2YS9PcGVyYXRpb25Ob3RhdGlvbkphdmEuamF2YQky MDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAgKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBDb250cmlidXRv cnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiBDb250cmlidXRvcnMg LSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRo ZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNj b21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCkBAIC00Miw4 ICs0Miw5IEBADQogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KIGltcG9ydCBqYXZhLnV0 aWwuSXRlcmF0b3I7DQogaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwu bG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KIA0KLWlt cG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwuYXBwbGlj YXRpb24uZXZlbnRzLkFyZ29FdmVudFB1bXA7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmFwcGxpY2F0 aW9uLmV2ZW50cy5BcmdvRXZlbnRUeXBlczsNCiBpbXBvcnQgb3JnLmFyZ291bWwuYXBwbGljYXRp b24uZXZlbnRzLkFyZ29IZWxwRXZlbnQ7DQpAQCAtNTMsNyArNTQsNyBAQA0KIA0KIC8qKg0KICAq IFRoZSBub3RhdGlvbiBmb3IgYW4gb3BlcmF0aW9uIG9yIHJlY2VwdGlvbi4NCi0gKiANCisgKg0K ICAqIEBhdXRob3IgbWljaGllbA0KICAqLw0KIHB1YmxpYyBjbGFzcyBPcGVyYXRpb25Ob3RhdGlv bkphdmEgZXh0ZW5kcyBPcGVyYXRpb25Ob3RhdGlvbiB7DQpAQCAtNjEsMTIgKzYyLDEyIEBADQog ICAgIC8qKg0KICAgICAgKiBMb2dnZXIuDQogICAgICAqLw0KLSAgICBwcml2YXRlIHN0YXRpYyBm aW5hbCBMb2dnZXIgTE9HID0gDQotICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKE9wZXJhdGlvbk5v dGF0aW9uSmF2YS5jbGFzcyk7DQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cg PQ0KKyAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihPcGVyYXRpb25Ob3RhdGlvbkphdmEuY2xhc3Mu Z2V0TmFtZSgpKTsNCiANCiAgICAgLyoqDQogICAgICAqIFRoZSBjb25zdHJ1Y3Rvci4NCi0gICAg ICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBvcGVyYXRpb24gdGhlIG9wZXJhdGlvbiB3ZSBy ZXByZXNlbnQNCiAgICAgICovDQogICAgIHB1YmxpYyBPcGVyYXRpb25Ob3RhdGlvbkphdmEoT2Jq ZWN0IG9wZXJhdGlvbikgew0KQEAgLTg4LDcgKzg5LDcgQEANCiAgICAgcHVibGljIFN0cmluZyBn ZXRQYXJzaW5nSGVscCgpIHsNCiAgICAgICAgIHJldHVybiAiUGFyc2luZyBpbiBKYXZhIG5vdCB5 ZXQgc3VwcG9ydGVkIjsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgQE92ZXJyaWRlDQogICAgIHB1 YmxpYyBTdHJpbmcgdG9TdHJpbmcoT2JqZWN0IG1vZGVsRWxlbWVudCwgTm90YXRpb25TZXR0aW5n cyBzZXR0aW5ncykgew0KICAgICAgICAgcmV0dXJuIHRvU3RyaW5nKG1vZGVsRWxlbWVudCk7DQpA QCAtOTksNyArMTAwLDcgQEANCiAgICAgICAgIFN0cmluZyBuYW1lU3RyID0gbnVsbDsNCiAgICAg ICAgIGJvb2xlYW4gY29uc3RydWN0b3IgPSBmYWxzZTsNCiANCi0gICAgICAgIEl0ZXJhdG9yIGl0 cyA9IA0KKyAgICAgICAgSXRlcmF0b3IgaXRzID0NCiAgICAgICAgICAgICBNb2RlbC5nZXRGYWNh ZGUoKS5nZXRTdGVyZW90eXBlcyhtb2RlbEVsZW1lbnQpLml0ZXJhdG9yKCk7DQogICAgICAgICBT dHJpbmcgbmFtZSA9ICIiOw0KICAgICAgICAgd2hpbGUgKGl0cy5oYXNOZXh0KCkpIHsNCkBAIC0x MTcsNyArMTE4LDcgQEANCiAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgbmFtZVN0ciA9 IE1vZGVsLmdldEZhY2FkZSgpLmdldE5hbWUobW9kZWxFbGVtZW50KTsNCiAgICAgICAgIH0NCi0g ICAgICAgIA0KKw0KICAgICAgICAgYm9vbGVhbiBpc1JlY2VwdGlvbiA9IE1vZGVsLmdldEZhY2Fk ZSgpLmlzQVJlY2VwdGlvbihtb2RlbEVsZW1lbnQpOw0KIA0KICAgICAgICAgaWYgKCFpc1JlY2Vw dGlvbikgew0KQEAgLTEyOSw3ICsxMzAsNyBAQA0KICAgICAgICAgc2IuYXBwZW5kKE5vdGF0aW9u VXRpbGl0eUphdmEuZ2VuZXJhdGVWaXNpYmlsaXR5KG1vZGVsRWxlbWVudCkpOw0KIA0KICAgICAg ICAgLy8gcGljayBvdXQgcmV0dXJuIHR5cGUNCi0gICAgICAgIENvbGxlY3Rpb24gcmV0dXJuUGFy YW1zID0gDQorICAgICAgICBDb2xsZWN0aW9uIHJldHVyblBhcmFtcyA9DQogICAgICAgICAgICAg TW9kZWwuZ2V0Q29yZUhlbHBlcigpLmdldFJldHVyblBhcmFtZXRlcnMobW9kZWxFbGVtZW50KTsN CiAgICAgICAgIE9iamVjdCBycDsNCiAgICAgICAgIGlmIChyZXR1cm5QYXJhbXMuc2l6ZSgpID09 IDApIHsNCkBAIC0xMzgsNyArMTM5LDggQEANCiAgICAgICAgICAgICBycCA9IHJldHVyblBhcmFt cy5pdGVyYXRvcigpLm5leHQoKTsNCiAgICAgICAgIH0NCiAgICAgICAgIGlmIChyZXR1cm5QYXJh bXMuc2l6ZSgpID4gMSkgIHsNCi0gICAgICAgICAgICBMT0cud2FybigiSmF2YSBnZW5lcmF0b3Ig b25seSBoYW5kbGVzIG9uZSByZXR1cm4gcGFyYW1ldGVyIg0KKyAgICAgICAgICAgIExPRy5sb2co TGV2ZWwuV0FSTklORywNCisgICAgICAgICAgICAgICAgICAgICJKYXZhIGdlbmVyYXRvciBvbmx5 IGhhbmRsZXMgb25lIHJldHVybiBwYXJhbWV0ZXIiDQogICAgICAgICAgICAgICAgICAgICArICIg LSBGb3VuZCAiICsgcmV0dXJuUGFyYW1zLnNpemUoKQ0KICAgICAgICAgICAgICAgICAgICAgKyAi IGZvciAiICsgTW9kZWwuZ2V0RmFjYWRlKCkuZ2V0TmFtZShtb2RlbEVsZW1lbnQpKTsNCiAgICAg ICAgIH0NCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwv bm90YXRpb24vcHJvdmlkZXJzL3VtbC9BYnN0cmFjdE1lc3NhZ2VOb3RhdGlvblVtbC5qYXZhDQpV cmw6IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5r L3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvbm90YXRpb24vcHJvdmlkZXJzL3VtbC9B YnN0cmFjdE1lc3NhZ2VOb3RhdGlvblVtbC5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIx PTE5OTA2JnIyPTE5OTA3DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJn b3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL25vdGF0aW9uL3Byb3ZpZGVycy91bWwvQWJzdHJhY3RN ZXNzYWdlTm90YXRpb25VbWwuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwt YXBwL3NyYy9vcmcvYXJnb3VtbC9ub3RhdGlvbi9wcm92aWRlcnMvdW1sL0Fic3RyYWN0TWVzc2Fn ZU5vdGF0aW9uVW1sLmphdmEJMjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMSw2ICsxLDYg QEANCiAvKiAkSWQkDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAy MDA5IENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEy IENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMg cHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAgKiBhcmUgbWFkZSBhdmFp bGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAN CiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJs ZSBhdA0KQEAgLTQ0LDggKzQ0LDkgQEANCiBpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOw0KIGlt cG9ydCBqYXZhLnV0aWwuTGlzdDsNCiBpbXBvcnQgamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNl cHRpb247DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0 aWwubG9nZ2luZy5Mb2dnZXI7DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0K IGltcG9ydCBvcmcuYXJnb3VtbC5hcHBsaWNhdGlvbi5ldmVudHMuQXJnb0V2ZW50UHVtcDsNCiBp bXBvcnQgb3JnLmFyZ291bWwuYXBwbGljYXRpb24uZXZlbnRzLkFyZ29FdmVudFR5cGVzOw0KIGlt cG9ydCBvcmcuYXJnb3VtbC5hcHBsaWNhdGlvbi5ldmVudHMuQXJnb0hlbHBFdmVudDsNCkBAIC01 OSwxMSArNjAsMTEgQEANCiAvKioNCiAgKiBUaGlzIGFic3RyYWN0IGNsYXNzIHByb3ZpZGVzIHRo ZSBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3INCiAgKiB0aGUgVU1MIG5vdGF0aW9uIG9mIG1lc3Nh Z2VzLjxici8+DQotICogSXQgaXMgZXh0ZW5kZWQgYnkge0BsaW5rIE1lc3NhZ2VOb3RhdGlvblVt bH0sIHdpdGggdGhlIA0KLSAqIG5vdGF0aW9uIG9mIG1lc3NhZ2VzIGFzIHNlZW4gaW4gY29sbGFi b3JhdGlvbiBkaWFncmFtcywgDQotICogYW5kIHtAbGluayBTRE1lc3NhZ2VOb3RhdGlvblVtbH0s IHdpdGggdGhlIG5vdGF0aW9uIG9mIA0KKyAqIEl0IGlzIGV4dGVuZGVkIGJ5IHtAbGluayBNZXNz YWdlTm90YXRpb25VbWx9LCB3aXRoIHRoZQ0KKyAqIG5vdGF0aW9uIG9mIG1lc3NhZ2VzIGFzIHNl ZW4gaW4gY29sbGFib3JhdGlvbiBkaWFncmFtcywNCisgKiBhbmQge0BsaW5rIFNETWVzc2FnZU5v dGF0aW9uVW1sfSwgd2l0aCB0aGUgbm90YXRpb24gb2YNCiAgKiBtZXNzYWdlcyBhcyBzZWVuIGlu IHNlcXVlbmNlIGRpYWdyYW1zLjxwPg0KLSAqIA0KKyAqDQogICogVGhlIE1lc3NhZ2Ugbm90YXRp b24gc3ludGF4IGlzIGEgbGluZSBvZiB0aGUgZm9sbG93aW5nIGZvcm0sDQogICogd2hpY2ggd2Ug Y2FuIGdlbmVyYXRlIGFuZCBwYXJzZTogPHA+DQogICoNCkBAIC05NCwzNiArOTUsMzYgQEANCiAg KiBhbGxvd3MgYSBudW1iZXIgcG9zc2libHkgZm9sbG93ZWQgYnkgYSBzZXF1ZW5jZSBvZiBsZXR0 ZXJzIGluIHRoZSByYW5nZQ0KICAqICdhJyAtICd6Jywgc2VxZWxlbSwgd2hpY2ggZG9lcyBub3Qg YWxsb3cgYSByZWN1cnJlbmNlLCBhbmQgbWVzc2FnZSwgd2hpY2gNCiAgKiBkb2VzIGFsbG93IG9u ZSByZWN1cnJlbmNlIG5lYXIgc2VxX2V4cHIuIDxwPg0KLSAqIA0KKyAqDQogICogKGZvcm1lcmx5 LCB0aGUgc3VwcG9ydGVkIHN5bnRheCB3YXM6IG5hbWU6IGFjdGlvbiApIDxwPg0KICAqDQogICog R2VuZXJhdGluZyBhIHN0cmluZyBmcm9tIHRoZSBtb2RlbCBoYXMgc29tZSBleHRyYSBmdW5jdGlv bmFsaXR5Og0KLSAqIElmIG9idGFpbmluZyB0aGUgU2NyaXB0IG9mIHRoZSBBY3Rpb24gcmV0dXJu cyBhbiBlbXB0eSBzdHJpbmcsIA0KKyAqIElmIG9idGFpbmluZyB0aGUgU2NyaXB0IG9mIHRoZSBB Y3Rpb24gcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcsDQogICogdGhlbiBhbiBhbHRlcm5hdGl2ZSBy ZXByZXNlbnRhdGlvbiBpcyBnaXZlbjoNCi0gKiBJZiB0aGUgYWN0aW9uIGlzIGEgQ2FsbEFjdGlv biwgdXNlIHRoZSBuYW1lIG9mIGl0cyBPcGVyYXRpb24sIA0KKyAqIElmIHRoZSBhY3Rpb24gaXMg YSBDYWxsQWN0aW9uLCB1c2UgdGhlIG5hbWUgb2YgaXRzIE9wZXJhdGlvbiwNCiAgKiBhbmQgaWYg aXQgaXMgYSBTZW5kQWN0aW9uLCB0aGUgbmFtZSBvZiBpdHMgU2lnbmFsLg0KICAqIElmIGFsc28g dGhpcyByZXR1cm5zIG5vIHN0cmluZywgdGhlbiB3ZSBkaXNwbGF5IHRoZSBuYW1lIG9mIHRoZSBN ZXNzYWdlLiA8cD4NCi0gKiANCisgKg0KICAqICBSYXRpb25hbGU6DQotICogIFRoaXMgYWxsb3dz IEFyZ29VTUwgdG8gc2hvdyBzb21ldGhpbmcgb24gdGhlIGRpYWdyYW0gd2l0aCBvbGRlciBwcm9q ZWN0cywgDQorICogIFRoaXMgYWxsb3dzIEFyZ29VTUwgdG8gc2hvdyBzb21ldGhpbmcgb24gdGhl IGRpYWdyYW0gd2l0aCBvbGRlciBwcm9qZWN0cywNCiAgKiAgd2hpY2ggb25seSBoYWQgdGhlIG5h bWUgb2YgdGhlIE1lc3NhZ2UgZmlsbGVkIGluIGJ5IHRoZSB1c2VyLg0KICAqICBUaGlzIGFsc28g bWF5IGltcHJvdmUgdGhlIGRpYWdyYW1zIGZvciBpbXBvcnRlZCBYTUkuPHA+DQogICoNCi0gKiBQ YXJzaW5nIGEgdGV4dCB0aGF0IGlzIGdlbmVyYXRlZCBieSBvbmUgb2YgdGhlIGJhY2t1cCBzY2Vu YXJpb3MsIA0KKyAqIFBhcnNpbmcgYSB0ZXh0IHRoYXQgaXMgZ2VuZXJhdGVkIGJ5IG9uZSBvZiB0 aGUgYmFja3VwIHNjZW5hcmlvcywNCiAgKiBjYXVzZXMgaXQgdG8gYmUgd3JpdHRlbiBiYWNrIGlu IHRoZSBzY3JpcHQgb2YgdGhlIEFjdGlvbi4NCi0gKiBIZW5jZSwgZWRpdGluZyB0aGUgdGV4dCBv biB0aGUgZGlhZ3JhbSBvbmx5IG9uY2UgDQorICogSGVuY2UsIGVkaXRpbmcgdGhlIHRleHQgb24g dGhlIGRpYWdyYW0gb25seSBvbmNlDQogICogY2F1c2VzIHRoZSBBY3Rpb24gU2NyaXB0IHRvIGJl IHVzZWQgZnJvbSB0aGVuIG9uLiA8cD4NCi0gKiANCisgKg0KICAqIFN1cHBvcnRlZCBvcGVyYXRp b25zIGZvciB0aGUgcGFyc2VyOiA8cD4NCiAgKiA8dWw+DQotICogPGxpPkxvY2F0aW5nIGFuIE9w ZXJhdGlvbiBieSBuYW1lIGFuZCB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyAtIA0KKyAqIDxsaT5M b2NhdGluZyBhbiBPcGVyYXRpb24gYnkgbmFtZSBhbmQgdGhlIG51bWJlciBvZiBhcmd1bWVudHMg LQ0KICAqIHRoZSBvcGVyYXRpb24gaXMgaG9va2VkIHRvIHRoZSBDYWxsQWN0aW9uIG9mIHRoZSBN ZXNzYWdlLg0KICAqIDxsaT5DcmVhdGUgYW4gT3BlcmF0aW9uIHdpdGggZ2l2ZW4gbmFtZSAobm8g YXJndW1lbnRzKS4NCiAgKiA8bGk+Q2hhbmdlIHRoZSBvcmRlciBvZiBtZXNzYWdlcyAocHJlZGVj ZXNzb3Ivc3VjY2Vzc29yKS4NCiAgKiA8bGk+UmV2ZXJ0aW5nIHRoZSBkaXJlY3Rpb24gb2YgYSBt ZXNzYWdlLg0KICAqIDxsaT5ldGMuDQogICogPC91bD4NCi0gKiANCisgKg0KICAqIEBzZWUgTWVz c2FnZU5vdGF0aW9uVW1sDQogICogQHNlZSBTRE1lc3NhZ2VOb3RhdGlvblVtbA0KICAqIEBzaW5j ZSAwLjI4LmFscGhhMQ0KQEAgLTEzMiw4ICsxMzMsOCBAQA0KIHB1YmxpYyBhYnN0cmFjdCBjbGFz cyBBYnN0cmFjdE1lc3NhZ2VOb3RhdGlvblVtbCBleHRlbmRzIE1lc3NhZ2VOb3RhdGlvbiB7DQog DQogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KLSAgICAgICAgTG9nZ2Vy LmdldExvZ2dlcihBYnN0cmFjdE1lc3NhZ2VOb3RhdGlvblVtbC5jbGFzcyk7DQotICAgIA0KKyAg ICAgICAgTG9nZ2VyLmdldExvZ2dlcihBYnN0cmFjdE1lc3NhZ2VOb3RhdGlvblVtbC5jbGFzcy5n ZXROYW1lKCkpOw0KKw0KICAgICAvKioNCiAgICAgICogVGhlIGxpc3Qgb2YgQ3VzdG9tU2VwYXJh dG9ycyB0byB1c2Ugd2hlbiB0b2tlbml6aW5nIHBhcmFtZXRlcnMuDQogICAgICAqLw0KQEAgLTE1 Nyw3ICsxNTgsNyBAQA0KICAgICAgICAgcGFyYW1ldGVyQ3VzdG9tU2VwID0gaW5pdFBhcmFtZXRl clNlcGFyYXRvcnMoKTsNCiAgICAgfQ0KIA0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIHRvU3RyaW5n KGZpbmFsIE9iamVjdCB1bWxNZXNzYWdlLCANCisgICAgcHJvdGVjdGVkIFN0cmluZyB0b1N0cmlu ZyhmaW5hbCBPYmplY3QgdW1sTWVzc2FnZSwNCiAgICAgICAgICAgICBib29sZWFuIHNob3dTZXF1 ZW5jZU51bWJlcnMpIHsNCiAgICAgICAgIEl0ZXJhdG9yIGl0Ow0KICAgICAgICAgQ29sbGVjdGlv biB1bWxQcmVkZWNlc3NvcnM7DQpAQCAtMTY1LDggKzE2Niw4IEBADQogICAgICAgICBPYmplY3Qg dW1sQWN0aXZhdG9yOyAvLyB0aGlzIGlzIGEgTWVzc2FnZSBVTUwgb2JqZWN0DQogICAgICAgICBN c2dQdHIgcHRyOw0KICAgICAgICAgaW50IGxwbjsNCi0gICAgICAgIA0KLSAgICAgICAgLyogU3Vw cG9ydGVkIGZvcm1hdDogDQorDQorICAgICAgICAvKiBTdXBwb3J0ZWQgZm9ybWF0Og0KICAgICAg ICAgICogICAgIHByZWRlY2Vzc29ycyBudW1iZXIgIjoiIGFjdGlvbg0KICAgICAgICAgICogVGhl IDMgcGFydHMgb2YgdGhlIHN0cmluZyB0byBnZW5lcmF0ZTogKi8NCiAgICAgICAgIFN0cmluZ0J1 aWxkZXIgcHJlZGVjZXNzb3JzID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsgLy8gaW5jbHVkZXMgdGhl ICIvIg0KQEAgLTIyMiwxNSArMjIzLDE1IEBADQogICAgICAgICAgICAgICAgICAgICAgICAgTW9k ZWwuZ2V0RmFjYWRlKCkuZ2V0UmVjdXJyZW5jZSh1bWxBY3Rpb24pKQ0KICAgICAgICAgICAgICAg ICAgICAgKyAiICINCiAgICAgICAgICAgICAgICAgICAgICsgbnVtYmVyOw0KLSAgICAgICAgICAg ICAgICAvKiBUT0RPOiBUaGUgcmVjdXJyZW5jZSBnb2VzIGluIGZyb250IG9mIHRoZSBhY3Rpb24/ IA0KKyAgICAgICAgICAgICAgICAvKiBUT0RPOiBUaGUgcmVjdXJyZW5jZSBnb2VzIGluIGZyb250 IG9mIHRoZSBhY3Rpb24/DQogICAgICAgICAgICAgICAgICAqIERvZXMgdGhpcyBub3QgY29udHJh ZGljdCB0aGUgaGVhZGVyIEphdmFEb2M/ICovDQogICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0K ICAgICAgICAgYWN0aW9uID0gTm90YXRpb25VdGlsaXR5VW1sLmdlbmVyYXRlQWN0aW9uU2VxdWVu Y2UodW1sQWN0aW9uKTsNCiAgICAgICAgIGlmICgiIi5lcXVhbHMoYWN0aW9uKSB8fCBhY3Rpb24u dHJpbSgpLnN0YXJ0c1dpdGgoIigiKSkgew0KICAgICAgICAgICAgIC8qIElmIHRoZSBzY3JpcHQg b2YgdGhlIEFjdGlvbiBpcyBlbXB0eSwNCi0gICAgICAgICAgICAgKiAob3Igb25seSBzcGVjaWZp ZXMgYXJndW1lbnRzIGFuZCBubyBtZXRob2QgbmFtZSkgDQotICAgICAgICAgICAgICogdGhlbiB3 ZSBnZW5lcmF0ZSBhIHN0cmluZyBiYXNlZCBvbiANCisgICAgICAgICAgICAgKiAob3Igb25seSBz cGVjaWZpZXMgYXJndW1lbnRzIGFuZCBubyBtZXRob2QgbmFtZSkNCisgICAgICAgICAgICAgKiB0 aGVuIHdlIGdlbmVyYXRlIGEgc3RyaW5nIGJhc2VkIG9uDQogICAgICAgICAgICAgICogYSBkaWZm ZXJlbnQgbW9kZWwgZWxlbWVudDogKi8NCiAgICAgICAgICAgICBhY3Rpb24gPSBnZXRJbml0aWF0 b3JPZkFjdGlvbih1bWxBY3Rpb24pOw0KICAgICAgICAgICAgIGlmICgiIi5lcXVhbHMoYWN0aW9u KSkgew0KQEAgLTI3NywxMiArMjc4LDEyIEBADQogICAgICAgICB9DQogICAgICAgICByZXR1cm4g cmVzdWx0Ow0KICAgICB9DQotICAgIA0KKw0KICAgICBwcm90ZWN0ZWQgTGlzdDxDdXN0b21TZXBh cmF0b3I+IGluaXRQYXJhbWV0ZXJTZXBhcmF0b3JzKCkgew0KICAgICAgICAgTGlzdDxDdXN0b21T ZXBhcmF0b3I+IHNlcGFyYXRvcnMgPSBuZXcgQXJyYXlMaXN0PEN1c3RvbVNlcGFyYXRvcj4oKTsN CiAgICAgICAgIHNlcGFyYXRvcnMuYWRkKE15VG9rZW5pemVyLlNJTkdMRV9RVU9URURfU0VQQVJB VE9SKTsNCiAgICAgICAgIHNlcGFyYXRvcnMuYWRkKE15VG9rZW5pemVyLkRPVUJMRV9RVU9URURf U0VQQVJBVE9SKTsNCi0gICAgICAgIHNlcGFyYXRvcnMuYWRkKE15VG9rZW5pemVyLlBBUkVOX0VY UFJfU1RSSU5HX1NFUEFSQVRPUik7ICAgICAgICANCisgICAgICAgIHNlcGFyYXRvcnMuYWRkKE15 VG9rZW5pemVyLlBBUkVOX0VYUFJfU1RSSU5HX1NFUEFSQVRPUik7DQogICAgICAgICByZXR1cm4g c2VwYXJhdG9yczsNCiAgICAgfQ0KIA0KQEAgLTMwNSwzMCArMzA2LDMwIEBADQogDQogICAgIC8q Kg0KICAgICAgKiBHZW5lcmF0ZSB0aGUgImludG5vIiBvZiB0aGUgZ2l2ZW4gTWVzc2FnZS4gPHA+ DQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBJZiB0aGUgcHJlZGVjZXNzb3Igb2YgdGhlIGdp dmVuIG1lc3NhZ2UgaGFzIG9ubHkgb25lIHN1Y2Nlc3NvciwgdGhlbg0KICAgICAgKiB3ZSByZXR1 cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gaW50ZWdlci4gPHA+DQog ICAgICAqIElmIHRoZSBwcmVkZWNlc3NvciBvZiB0aGUgZ2l2ZW4gbWVzc2FnZSBoYXMgbW9yZSB0 aGFuIG9uZSBzdWNjZXNzb3IsIHRoZW4NCi0gICAgICogdGhpcyBpcyBhIGNhc2Ugb2YgcGFyYWxs ZWwgZXhlY3V0aW9uIG9mIG1lc3NhZ2VzLCBlLmcuIA0KKyAgICAgKiB0aGlzIGlzIGEgY2FzZSBv ZiBwYXJhbGxlbCBleGVjdXRpb24gb2YgbWVzc2FnZXMsIGUuZy4NCiAgICAgICogTWVzc2FnZSAz LjFhIGFuZCBNZXNzYWdlIDMuMWIgYXJlIGNvbmN1cnJlbnQgd2l0aGluIGFjdGl2YXRpb24gMy4x Lg0KLSAgICAgKiBIZW5jZSBJbiB0aGlzIGNhc2Ugd2UgdXNlIGEgc3ludGF4IGxpa2U6IDFhLCAx YiwgMWMuIA0KLSAgICAgKiAgDQotICAgICAqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZmlyc3Qgc3Vj Y2Vzc29yIA0KLSAgICAgKiBpbiB0aGUgb3JkZXJlZCBsaXN0IG9mIHN1Y2Nlc3NvcnMgdGhhdCBo YXMgbW9yZSB0aGFuIG9uZSBlbnRyeSANCisgICAgICogSGVuY2UgSW4gdGhpcyBjYXNlIHdlIHVz ZSBhIHN5bnRheCBsaWtlOiAxYSwgMWIsIDFjLg0KKyAgICAgKg0KKyAgICAgKiBUaGlzIG1lYW5z IHRoYXQgdGhlIGZpcnN0IHN1Y2Nlc3Nvcg0KKyAgICAgKiBpbiB0aGUgb3JkZXJlZCBsaXN0IG9m IHN1Y2Nlc3NvcnMgdGhhdCBoYXMgbW9yZSB0aGFuIG9uZSBlbnRyeQ0KICAgICAgKiB3aWxsIGdl dCB0aGUgcG9zdGZpeCBhLCB0aGUgc2Vjb25kIGIsIGV0Yy4NCi0gICAgICogIA0KKyAgICAgKg0K ICAgICAgKiBUT0RPOiBEb2N1bWVudCBleGNlcHRpb25hbCBiZWhhdmlvdXIuDQotICAgICAqIA0K LSAgICAgKiBAcGFyYW0gdW1sTWVzc2FnZSB0aGUgVU1MIG1lc3NhZ2Ugb2JqZWN0IHRvIGdlbmVy YXRlIA0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gdW1sTWVzc2FnZSB0aGUgVU1MIG1lc3NhZ2Ug b2JqZWN0IHRvIGdlbmVyYXRlDQogICAgICAqIHRoZSBzZXF1ZW5jZSBudW1iZXIgZm9yDQogICAg ICAqIEBwYXJhbSB1bWxQcmVkZWNlc3NvciB0aGUgaW1tZWRpYXRlIHByZWRlY2Vzc29yIG1lc3Nh Z2UgKFVNTCBvYmplY3QpDQogICAgICAqIHRoYXQgaGFzIHRoZSBnaXZlbiBtZXNzYWdlIGFzIHN1 Y2Nlc3Nvcg0KLSAgICAgKiBAcGFyYW0gcG9zaXRpb24gdGhlIGludGVnZXIgcG9zaXRpb24gb2Yg dGhlIGdpdmVuIG1lc3NhZ2UgDQorICAgICAqIEBwYXJhbSBwb3NpdGlvbiB0aGUgaW50ZWdlciBw b3NpdGlvbiBvZiB0aGUgZ2l2ZW4gbWVzc2FnZQ0KICAgICAgKiB3aXRoaW4gaXRzIHNlcXVlbmNl DQotICAgICAqIEByZXR1cm4gdGhlIGdlbmVyYXRlZCBzZXF1ZW5jZSBleHByZXNzaW9uIHN0cmlu ZywgDQorICAgICAqIEByZXR1cm4gdGhlIGdlbmVyYXRlZCBzZXF1ZW5jZSBleHByZXNzaW9uIHN0 cmluZywNCiAgICAgICogb3IgbnVsbCBpZiB0aGUgZ2l2ZW4gTWVzc2FnZSB3YXMgbnVsbA0KICAg ICAgKi8NCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZW5lcmF0ZU1lc3NhZ2VOdW1iZXIoT2JqZWN0 IHVtbE1lc3NhZ2UsIA0KKyAgICBwcm90ZWN0ZWQgU3RyaW5nIGdlbmVyYXRlTWVzc2FnZU51bWJl cihPYmplY3QgdW1sTWVzc2FnZSwNCiAgICAgICAgICAgICBPYmplY3QgdW1sUHJlZGVjZXNzb3Is DQogICAgICAgICAgICAgaW50IHBvc2l0aW9uKSB7DQogICAgICAgICBJdGVyYXRvciBpdDsNCkBA IC0zNzQsNyArMzc1LDcgQEANCiAgICAgICovDQogICAgIHByaXZhdGUgc3RhdGljIGludCBmaW5k TXNnT3JkZXJCcmVhayhTdHJpbmcgcykgew0KICAgICAgICAgaW50IGksIHQ7DQotICAgIA0KKw0K ICAgICAgICAgdCA9IHMubGVuZ3RoKCk7DQogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdDsgaSsr KSB7DQogICAgICAgICAgICAgY2hhciBjID0gcy5jaGFyQXQoaSk7DQpAQCAtMzg2LDggKzM4Nyw4 IEBADQogICAgIH0NCiANCiAgICAgLyoqDQotICAgICAqIEdlbmVyYXRlcyB0aGUgdGV4dHVhbCBu dW1iZXIgb2YgYSBnaXZlbiBNZXNzYWdlLCBjYWxsZWQgc2VxX2V4cHIuIA0KLSAgICAgKiBUaGUg c2VxX2V4cHIgaXMgYSBzdHJpbmcgb2YgbnVtYmVycyBzZXBhcmF0ZWQgYnkgcG9pbnRzIA0KKyAg ICAgKiBHZW5lcmF0ZXMgdGhlIHRleHR1YWwgbnVtYmVyIG9mIGEgZ2l2ZW4gTWVzc2FnZSwgY2Fs bGVkIHNlcV9leHByLg0KKyAgICAgKiBUaGUgc2VxX2V4cHIgaXMgYSBzdHJpbmcgb2YgbnVtYmVy cyBzZXBhcmF0ZWQgYnkgcG9pbnRzDQogICAgICAqIHdoaWNoIGRlc2NyaWJlcyB0aGUgbWVzc2Fn ZSdzIG9yZGVyDQogICAgICAqIGFuZCBsZXZlbCBpbiBhIGNvbGxhYm9yYXRpb24uPHA+DQogICAg ICAqDQpAQCAtNDA2LDEwICs0MDcsMTAgQEANCiANCiAgICAgLyoqDQogICAgICAqIENvdW50IHRo ZSBudW1iZXIgb2Ygc3VjY2Vzc29ycyBvZiB0aGUgZ2l2ZW4gTWVzc2FnZS4gPHA+DQotICAgICAq IA0KKyAgICAgKg0KICAgICAgKiBTdWNjZXNzb3JzIGhhdmUgdGhlIHNhbWUgQWN0aXZhdG9yIGFz IHRoZSBnaXZlbiBtZXNzYWdlLg0KICAgICAgKiBUaGlzIEFjdGl2YXRvciBtYXkgYmUgbnVsbC4N Ci0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBtZXNzYWdlIHRoZSBVTUwgTWVzc2Fn ZSBvYmplY3QNCiAgICAgICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NvcnM6IDAuLm4N CiAgICAgICovDQpAQCAtNDM4LDcgKzQzOSw3IEBADQogICAgICAgICBpZiAoZXhwciA9PSBudWxs KSB7DQogICAgICAgICAgICAgcmV0dXJuICIiOw0KICAgICAgICAgfQ0KLSAgICANCisNCiAgICAg ICAgIHJldHVybiBNb2RlbC5nZXRGYWNhZGUoKS5nZXRCb2R5KGV4cHIpLnRvU3RyaW5nKCk7DQog ICAgIH0NCiANCkBAIC03NDUsNyArNzQ2LDcgQEANCiANCiAgICAgICAgIHByaW50RGVidWdJbmZv KHMsIGZuYW1lLCBndWFyZCwgcGFyYW1FeHByLCB2YXJuYW1lLCBwcmVkZWNlc3NvcnMsDQogICAg ICAgICAgICAgICAgIHNlcW5vLCBwYXJhbGxlbGwsIGl0ZXJhdGl2ZSk7DQotICAgICAgICANCisN CiAgICAgICAgIC8qIE5vdyBhcHBseSB0aGUgY2hhbmdlcyB0byB0aGUgbW9kZWw6ICovDQogDQog ICAgICAgICBidWlsZEFjdGlvbih1bWxNZXNzYWdlKTsNCkBAIC03NzIsNyArNzczLDcgQEANCiAg ICAgcHJpdmF0ZSB2b2lkIHByaW50RGVidWdJbmZvKFN0cmluZyBzLCBTdHJpbmcgZm5hbWUsIFN0 cmluZ0J1aWxkZXIgZ3VhcmQsDQogICAgICAgICAgICAgU3RyaW5nIHBhcmFtRXhwciwgU3RyaW5n QnVpbGRlciB2YXJuYW1lLCBMaXN0PExpc3Q+IHByZWRlY2Vzc29ycywNCiAgICAgICAgICAgICBM aXN0PEludGVnZXI+IHNlcW5vLCBib29sZWFuIHBhcmFsbGVsbCwgYm9vbGVhbiBpdGVyYXRpdmUp IHsNCi0gICAgICAgIGlmIChMT0cuaXNEZWJ1Z0VuYWJsZWQoKSkgew0KKyAgICAgICAgaWYgKExP Ry5pc0xvZ2dhYmxlKExldmVsLkZJTkUpKSB7DQogICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGJ1 ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsNCiAgICAgICAgICAgICBidWYuYXBwZW5kKCJQYXJzZU1l c3NhZ2U6ICIgKyBzICsgIlxuIik7DQogICAgICAgICAgICAgYnVmLmFwcGVuZCgiTWVzc2FnZTog Iik7DQpAQCAtNzk5LDcgKzgwMCw3IEBADQogICAgICAgICAgICAgICAgICAgICArIHBhcmFsbGVs bCArICJcbiIpOw0KICAgICAgICAgICAgIGJ1Zi5hcHBlbmQodmFybmFtZSArICIgOj0gIiArIGZu YW1lICsgIiAoICIgKyBwYXJhbUV4cHIgKyAiICkiDQogICAgICAgICAgICAgICAgICAgICArICJc biIpOw0KLSAgICAgICAgICAgIExPRy5kZWJ1ZyhidWYpOw0KKyAgICAgICAgICAgIExPRy5sb2co TGV2ZWwuRklORSwgInswfSIsIGJ1Zik7DQogICAgICAgICB9DQogICAgIH0NCiANCkBAIC04NDgs NyArODQ5LDcgQEANCiANCiAgICAgLyoqDQogICAgICAqIFNldCB0aGUgcHJlZGVjZXNzb3JzIG9m IHRoZSBnaXZlbiBNZXNzYWdlLg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIHVt bE1lc3NhZ2UgdGhlIGdpdmVuIFVNTCBNZXNzYWdlIG9iamVjdCB0byBiZSBhZGFwdGVkDQogICAg ICAqIEBwYXJhbSBwcmVkZWNlc3NvcnMgdGhlIGdpdmVuIHByZWRlY2Vzc29ycyBhcyBwYXJzZWQN CiAgICAgICogQHBhcmFtIGhhc1ByZWRlY2Vzc29ycyB0cnVlIGlmIHRoZXJlIGFyZSBzb21lLCBp ZiBmYWxzZSB3ZSBkbyBub3RoaW5nDQpAQCAtOTAyLDE1ICs5MDMsMTUgQEANCiANCiAgICAgLyoq DQogICAgICAqIFVwZGF0ZSB0aGUgbW9kZWwgd2l0aCB0aGUgb3BlcmF0aW9uIG5hbWUuIDxwPg0K LSAgICAgKiANCisgICAgICoNCiAgICAgICogVGhlIGdpdmVuIG9wZXJhdGlvbiBuYW1lIGlzIGxv Y2F0ZWQgb24gdGhlIHJlY2VpdmVyIG9mIHRoZSBnaXZlbiBtZXNzYWdlLg0KLSAgICAgKiBJZiBh biBvcGVyYXRpb24gd2l0aCB0aGUgZ2l2ZW4gbmFtZSANCisgICAgICogSWYgYW4gb3BlcmF0aW9u IHdpdGggdGhlIGdpdmVuIG5hbWUNCiAgICAgICogYW5kIGEgbWF0Y2hpbmcgbnVtYmVyIG9mIGFy Z3VtZW50cyBpcyBsb2NhdGVkLA0KICAgICAgKiB0aGVuIHRoZSBDYWxsQWN0aW9uIG9mIHRoZSBt ZXNzYWdlIGlzIGFkYXB0ZWQgYWNjb3JkaW5nbHkuDQotICAgICAqICAgDQorICAgICAqDQogICAg ICAqIEBwYXJhbSB1bWxNZXNzYWdlIHRoZSBtZXNzYWdlIG9mIHdoaWNoIHRoZSBDYWxsQWN0aW9u IGlzIHRvIGJlIGFkYXB0ZWQNCiAgICAgICogQHBhcmFtIGZuYW1lIHRoZSBuYW1lIG9mIHRoZSBv cGVyYXRpb24gdG8gYmUgdXNlZA0KLSAgICAgKiBAcGFyYW0gcmVmaW5kT3BlcmF0aW9uIHRydWUg aWYgd2UgaGF2ZSB0byBzZXQgdGhlIG9wZXJhdGlvbiANCisgICAgICogQHBhcmFtIHJlZmluZE9w ZXJhdGlvbiB0cnVlIGlmIHdlIGhhdmUgdG8gc2V0IHRoZSBvcGVyYXRpb24NCiAgICAgICogb2Yg dGhlIENhbGxBY3Rpb24NCiAgICAgICogQHRocm93cyBQYXJzZUV4Y2VwdGlvbiBpZiB0aGUgb3Bl cmF0aW9uIHN5bnRheCBjYW4gbm90IGJlIHBhcnNlZA0KICAgICAgKi8NCkBAIC05OTgsMTAgKzk5 OSwxMCBAQA0KIA0KICAgICAgICAgICAgIHJvb3QgPSBudWxsOw0KICAgICAgICAgICAgIGlmIChw bmFtZS5sZW5ndGgoKSA+IDApIHsNCi0gICAgICAgICAgICAgICAgcm9vdCA9IGZpbmRNc2coTW9k ZWwuZ2V0RmFjYWRlKCkuZ2V0U2VuZGVyKHVtbE1lc3NhZ2UpLCANCisgICAgICAgICAgICAgICAg cm9vdCA9IGZpbmRNc2coTW9kZWwuZ2V0RmFjYWRlKCkuZ2V0U2VuZGVyKHVtbE1lc3NhZ2UpLA0K ICAgICAgICAgICAgICAgICAgICAgICAgIHBuYW1lLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAg ICAgICBpZiAocm9vdCA9PSBudWxsKSB7DQotICAgICAgICAgICAgICAgICAgICByb290ID0gZmlu ZE1zZyhNb2RlbC5nZXRGYWNhZGUoKS5nZXRSZWNlaXZlcih1bWxNZXNzYWdlKSwgDQorICAgICAg ICAgICAgICAgICAgICByb290ID0gZmluZE1zZyhNb2RlbC5nZXRGYWNhZGUoKS5nZXRSZWNlaXZl cih1bWxNZXNzYWdlKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5hbWUudG9TdHJp bmcoKSk7DQogICAgICAgICAgICAgICAgICAgICBpZiAocm9vdCAhPSBudWxsKSB7DQogICAgICAg ICAgICAgICAgICAgICAgICAgc3dhcFJvbGVzID0gdHJ1ZTsNCkBAIC0xMTU2LDE3ICsxMTU3LDE3 IEBADQogICAgIH0NCiANCiAgICAgLyoqDQotICAgICAqIFN0b3JlIHRoZSBnaXZlbiBmdW5jdGlv biBuYW1lIGFuZCByZXR1cm4gdmFyaWFibGUgbmFtZSANCisgICAgICogU3RvcmUgdGhlIGdpdmVu IGZ1bmN0aW9uIG5hbWUgYW5kIHJldHVybiB2YXJpYWJsZSBuYW1lDQogICAgICAqIGluIHRoZSBz Y3JpcHQgb2YgdGhlIGFjdGlvbiBvZiB0aGUgZ2l2ZW4gbWVzc2FnZS4gPHA+DQotICAgICAqIA0K KyAgICAgKg0KICAgICAgKiBDb25zdHJhaW50OiB0aGUgZ2l2ZW4gTWVzc2FnZSBzaGFsbCBoYXZl IGFuIEFjdGlvbi4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSB1bWxNZXNzYWdl IHRoZSBnaXZlbiBVTUwgTWVzc2FnZSBvYmplY3QgdG8gYWRhcHQNCiAgICAgICogQHBhcmFtIGZu YW1lIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbg0KICAgICAgKiBAcGFyYW0gdmFybmFtZSB0aGUg cmV0dXJuIHZhcmlhYmxlIG5hbWUNCi0gICAgICogQHBhcmFtIHJlZmluZE9wZXJhdGlvbiBpZiBm YWxzZSwgdGhlbiB3ZSBtYXkgcmV0dXJuIHRydWUgb3IgZmFsc2UuIA0KKyAgICAgKiBAcGFyYW0g cmVmaW5kT3BlcmF0aW9uIGlmIGZhbHNlLCB0aGVuIHdlIG1heSByZXR1cm4gdHJ1ZSBvciBmYWxz ZS4NCiAgICAgICogSWYgdHJ1ZSwgd2UgcmV0dXJuIHRydWUuDQotICAgICAqIEByZXR1cm4gdHJ1 ZSBpZiB3ZSBzdG9yZWQgdGhlIGZuYW1lIGFuZCB2YXJuYW1lIA0KKyAgICAgKiBAcmV0dXJuIHRy dWUgaWYgd2Ugc3RvcmVkIHRoZSBmbmFtZSBhbmQgdmFybmFtZQ0KICAgICAgKiBpbiB0aGUgQWN0 aW9uIG9mIHRoZSBNZXNzYWdlDQogICAgICAqLw0KICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBoYW5k bGVGdW5jdGlvbk5hbWUoT2JqZWN0IHVtbE1lc3NhZ2UsIFN0cmluZyBmbmFtZSwNCkBAIC0xMTk4 LDEyICsxMTk5LDEyIEBADQogICAgIC8qKg0KICAgICAgKiBGaWxsIGluIHRoZSB2YXJpYWJsZSBu YW1lIGlmIGl0IGlzIGJsYW5rLiAgPHA+DQogICAgICAqIFRoZSB2YXJpYWJsZSBuYW1lIGlzIHRo ZSBwYXJ0IGluIGZyb250IG9mIHRoZSBhc3NpZ25tZW50IG9wZXJhdG9yLg0KLSAgICAgKiANCisg ICAgICoNCiAgICAgICogQHBhcmFtIHVtbE1lc3NhZ2UgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gZmls bCB0aGUgdmFyaWFibGUgbmFtZSBmb3INCi0gICAgICogQHBhcmFtIHZhcm5hbWUgaWYgbnVsbCwg dGhlbiB3ZSBnZXQgdGhlIHZhcmlhYmxlIG5hbWUgZnJvbSB0aGUgbW9kZWwuIA0KLSAgICAgKiBA cGFyYW0gbWF5RGVsZXRlRXhwciBpZiB0cnVlLCB0aGVuIHdlIG1heSBkZWxldGUgdGhlIHZhcmlh YmxlLCANCisgICAgICogQHBhcmFtIHZhcm5hbWUgaWYgbnVsbCwgdGhlbiB3ZSBnZXQgdGhlIHZh cmlhYmxlIG5hbWUgZnJvbSB0aGUgbW9kZWwuDQorICAgICAqIEBwYXJhbSBtYXlEZWxldGVFeHBy IGlmIHRydWUsIHRoZW4gd2UgbWF5IGRlbGV0ZSB0aGUgdmFyaWFibGUsDQogICAgICAqIGFuZCBo ZW5jZSB3ZSByZXR1cm4gYW4gZW1wdHkgc3RyaW5nDQotICAgICAqIEByZXR1cm4gdGhlIG9yaWdp bmFsIHZhcmlhYmxlIG5hbWUsIG9yIGlmIGl0IHdhcyBudWxsLCANCisgICAgICogQHJldHVybiB0 aGUgb3JpZ2luYWwgdmFyaWFibGUgbmFtZSwgb3IgaWYgaXQgd2FzIG51bGwsDQogICAgICAqIGEg dmFyaWFibGUgbmFtZSBnZW5lcmF0ZWQgZnJvbSB0aGUgbW9kZWwNCiAgICAgICovDQogICAgIHBy b3RlY3RlZCBTdHJpbmdCdWlsZGVyIGZpbGxCbGFua1ZhcmlhYmxlTmFtZShPYmplY3QgdW1sTWVz c2FnZSwNCkBAIC0xMjM0LDE0ICsxMjM1LDE0IEBADQogDQogICAgIC8qKg0KICAgICAgKiBGaWxs IGluIHRoZSBmdW5jdGlvbiBuYW1lIGlmIGl0IGlzIGJsYW5rLiA8cD4NCi0gICAgICogDQorICAg ICAqDQogICAgICAqIFRoZSBmbmFtZSBpcyB0aGUgcGFydCBvZiB0aGUgc2NyaXB0IGFmdGVyIHRo ZSBhc3NpZ25tZW50IG9wZXJhdG9yLg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFt IHVtbE1lc3NhZ2UgdGhlIGdpdmVuIG1lc3NhZ2UgdG8gZmlsbCB0aGUgZm5hbWUgZm9yDQotICAg ICAqIEBwYXJhbSBmbmFtZSBpZiBudWxsLCB0aGVuIHdlIGdldCB0aGUgZm5hbWUgZnJvbSB0aGUg bW9kZWwuIA0KLSAgICAgKiBAcGFyYW0gbWF5RGVsZXRlRXhwciBpZiB0cnVlLCB0aGVuIHdlIG1h eSBkZWxldGUgdGhlIGZ1bmN0aW9uLCANCisgICAgICogQHBhcmFtIGZuYW1lIGlmIG51bGwsIHRo ZW4gd2UgZ2V0IHRoZSBmbmFtZSBmcm9tIHRoZSBtb2RlbC4NCisgICAgICogQHBhcmFtIG1heURl bGV0ZUV4cHIgaWYgdHJ1ZSwgdGhlbiB3ZSBtYXkgZGVsZXRlIHRoZSBmdW5jdGlvbiwNCiAgICAg ICogYW5kIGhlbmNlIHdlIHJldHVybiBhbiBlbXB0eSBzdHJpbmcNCi0gICAgICogQHJldHVybiB0 aGUgb3JpZ2luYWwgZm5hbWUsIG9yIGlmIGl0IHdhcyBudWxsLCANCisgICAgICogQHJldHVybiB0 aGUgb3JpZ2luYWwgZm5hbWUsIG9yIGlmIGl0IHdhcyBudWxsLA0KICAgICAgKiBhIGZuYW1lIGdl bmVyYXRlZCBmcm9tIHRoZSBtb2RlbA0KICAgICAgKi8NCiAgICAgcHJvdGVjdGVkIFN0cmluZyBm aWxsQmxhbmtGdW5jdGlvbk5hbWUoT2JqZWN0IHVtbE1lc3NhZ2UsIFN0cmluZyBmbmFtZSwNCkBA IC0xMjc0LDE3ICsxMjc1LDE3IEBADQogICAgIH0NCiANCiAgICAgLyoqDQotICAgICAqIFN0b3Jl IHRoZSBwYXJzZWQgZ3VhcmQgaW4gdGhlIFVNTCBvYmplY3RzIHJlbGF0ZWQgdG8gdGhlIGdpdmVu IE1lc3NhZ2UuIA0KLSAgICAgKiANCisgICAgICogU3RvcmUgdGhlIHBhcnNlZCBndWFyZCBpbiB0 aGUgVU1MIG9iamVjdHMgcmVsYXRlZCB0byB0aGUgZ2l2ZW4gTWVzc2FnZS4NCisgICAgICoNCiAg ICAgICogQHBhcmFtIHVtbE1lc3NhZ2UgdGhlIFVNTCBNZXNzYWdlIG9iamVjdA0KICAgICAgKiBA cGFyYW0gZ3VhcmQgdGhlIGd1YXJkIGV4cHJlc3Npb24gc3RyaW5nDQogICAgICAqIEBwYXJhbSBw YXJhbGxlbGwgdHJ1ZSBpZiBwYXJhbGxlbCBleGVjdXRpb24gd2FzIGluZGljYXRlZA0KLSAgICAg KiBAcGFyYW0gaXRlcmF0aXZlIHRydWUgaWYgdGhpcyBpcyBhbiBpdGVyYXRpdmUgZXhwcmVzc2lv biwgDQorICAgICAqIEBwYXJhbSBpdGVyYXRpdmUgdHJ1ZSBpZiB0aGlzIGlzIGFuIGl0ZXJhdGl2 ZSBleHByZXNzaW9uLA0KICAgICAgKiBhcyBvcHBvc2VkIHRvIGEgY29uZGl0aW9uDQogICAgICAq Lw0KICAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVHdWFyZChPYmplY3QgdW1sTWVzc2FnZSwgU3Ry aW5nQnVpbGRlciBndWFyZCwNCiAgICAgICAgICAgICBib29sZWFuIHBhcmFsbGVsbCwgYm9vbGVh biBpdGVyYXRpdmUpIHsNCi0gICAgICAgIC8qIFN0b3JlIHRoZSBndWFyZCwgaS5lLiBjb25kaXRp b24gb3IgaXRlcmF0aW9uIGV4cHJlc3Npb24sIA0KKyAgICAgICAgLyogU3RvcmUgdGhlIGd1YXJk LCBpLmUuIGNvbmRpdGlvbiBvciBpdGVyYXRpb24gZXhwcmVzc2lvbiwNCiAgICAgICAgICAqIGlu IHRoZSByZWN1cnJlbmNlIGZpZWxkIG9mIHRoZSBBY3Rpb246ICovDQogICAgICAgICBpZiAoZ3Vh cmQgIT0gbnVsbCkgew0KICAgICAgICAgICAgIGd1YXJkID0gbmV3IFN0cmluZ0J1aWxkZXIoIlsi ICsgZ3VhcmQudG9TdHJpbmcoKS50cmltKCkgKyAiXSIpOw0KQEAgLTEzMDYsNyArMTMwNyw3IEBA DQogICAgIC8qKg0KICAgICAgKiBCdWlsZCBhIENhbGxBY3Rpb24gZm9yIHRoZSBnaXZlbiBVTUwg TWVzc2FnZQ0KICAgICAgKiBpZiBpdCBkaWQgbm90IGhhdmUgYW4gQWN0aW9uIHlldC4NCi0gICAg ICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSB1bWxNZXNzYWdlIHRoZSBVTUwgTWVzc2FnZSBv YmplY3QgdG8gY3JlYXRlIGFuIEFjdGlvbiBmb3INCiAgICAgICovDQogICAgIHByb3RlY3RlZCB2 b2lkIGJ1aWxkQWN0aW9uKE9iamVjdCB1bWxNZXNzYWdlKSB7DQpAQCAtMTMyMSwxNSArMTMyMiwx NSBAQA0KICAgICB9DQogDQogICAgIC8qKg0KLSAgICAgKiBUT0RPOiBUaGlzIG5hbWUgb2YgdGhl IGV4cHJlc3Npb24gbGFuZ3VhZ2Ugc2hvdWxkIGJlIA0KKyAgICAgKiBUT0RPOiBUaGlzIG5hbWUg b2YgdGhlIGV4cHJlc3Npb24gbGFuZ3VhZ2Ugc2hvdWxkIGJlDQogICAgICAqIGNvbmZpZ3VyYWJs ZSBieSB0aGUgdXNlci4gPHA+DQotICAgICAqIA0KLSAgICAgKiBBY2NvcmRpbmcgdG8gdGhlIFVN TCBzdGFuZGFyZCwgDQotICAgICAqIHRoZSBleHByZXNzaW9uIGxhbmd1YWdlIHNob3VsZCBiZSB0 aGUgc2FtZSANCisgICAgICoNCisgICAgICogQWNjb3JkaW5nIHRvIHRoZSBVTUwgc3RhbmRhcmQs DQorICAgICAqIHRoZSBleHByZXNzaW9uIGxhbmd1YWdlIHNob3VsZCBiZSB0aGUgc2FtZQ0KICAg ICAgKiBmb3IgYWxsIGVsZW1lbnRzIGluIG9uZSBkaWFncmFtLiA8cD4NCi0gICAgICogDQorICAg ICAqDQogICAgICAqIFVNTCBpcyBub3QgYSBzZW5zaWJsZSBkZWZhdWx0IC0gdXN1YWxseSB0aGlz IGlzIHNvbWUgcHNldWRvLWxhbmd1YWdlLg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHJl dHVybiB0aGUgbmFtZSBvZiB0aGUgZXhwcmVzc2lvbiBsYW5ndWFnZQ0KICAgICAgKi8NCiAgICAg cHJpdmF0ZSBTdHJpbmcgZ2V0RXhwcmVzc2lvbkxhbmd1YWdlKCkgew0KQEAgLTEzMzcsNyArMTMz OCw3IEBADQogICAgIH0NCiANCiAgICAgLyoqDQotICAgICAqIFdhbGtzIGEgY2FsbCB0cmVlIGZy b20gYSA8Y29kZT5yb290PC9jb2RlPiBub2RlIA0KKyAgICAgKiBXYWxrcyBhIGNhbGwgdHJlZSBm cm9tIGEgPGNvZGU+cm9vdDwvY29kZT4gbm9kZQ0KICAgICAgKiBmb2xsb3dpbmcgdGhlIGRpcmVj dGlvbnMgZ2l2ZW4gaW4gPGNvZGU+cGF0aDwvY29kZT4NCiAgICAgICogdG8gYSBkZXN0aW5hdGlv biBub2RlLiBJZiB0aGUgZGVzdGluYXRpb24gbm9kZSBjYW5ub3QgYmUgcmVhY2hlZCwgdGhlbg0K ICAgICAgKiBudWxsIGlzIHJldHVybmVkLg0KQEAgLTEzNTMsMTIgKzEzNTQsMTIgQEANCiAgICAg ICAgICAgICBpZiAocGF0aC5nZXQoaSkgIT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICBidiA9 IE1hdGgubWF4KCgoSW50ZWdlcikgcGF0aC5nZXQoaSkpLmludFZhbHVlKCkgLSAxLCAwKTsNCiAg ICAgICAgICAgICB9DQotICAgIA0KKw0KICAgICAgICAgICAgIGludCBzdiA9IDA7DQogICAgICAg ICAgICAgaWYgKHBhdGguZ2V0KGkgKyAxKSAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAgIHN2 ID0gTWF0aC5tYXgoKChJbnRlZ2VyKSBwYXRoLmdldChpICsgMSkpLmludFZhbHVlKCksIDApOw0K ICAgICAgICAgICAgIH0NCi0gICAgDQorDQogICAgICAgICAgICAgcm9vdCA9IHdhbGsocm9vdCwg YnYgLSAxLCB0cnVlKTsNCiAgICAgICAgICAgICBpZiAocm9vdCA9PSBudWxsKSB7DQogICAgICAg ICAgICAgICAgIHJldHVybiBudWxsOw0KQEAgLTE0NzMsNyArMTQ3NCw3IEBADQogICAgICAgICBm b3IgKDsgaSA8IGxlbjspIHsNCiAgICAgICAgICAgICBpbnQgaWJ2LCBpc3Y7DQogICAgICAgICAg ICAgaW50IGpidiwganN2Ow0KLSAgICANCisNCiAgICAgICAgICAgICBpYnYgPSAwOw0KICAgICAg ICAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIHsNCiAgICAgICAgICAgICAgICAgY2hhciBjID0g bjEuY2hhckF0KGkpOw0KQEAgLTE0OTIsNyArMTQ5Myw3IEBADQogICAgICAgICAgICAgICAgIGlz diAqPSAyNjsNCiAgICAgICAgICAgICAgICAgaXN2ICs9IGMgLSAnYSc7DQogICAgICAgICAgICAg fQ0KLSAgICANCisNCiAgICAgICAgICAgICBqYnYgPSAwOw0KICAgICAgICAgICAgIGZvciAoOyBq IDwgamxlbjsgaisrKSB7DQogICAgICAgICAgICAgICAgIGNoYXIgYyA9IG4yLmNoYXJBdChqKTsN CkBAIC0xNTExLDE2ICsxNTEyLDE2IEBADQogICAgICAgICAgICAgICAgIGpzdiAqPSAyNjsNCiAg ICAgICAgICAgICAgICAganN2ICs9IGMgLSAnYSc7DQogICAgICAgICAgICAgfQ0KLSAgICANCisN CiAgICAgICAgICAgICBpZiAoaWJ2ICE9IGpidiB8fCBpc3YgIT0ganN2KSB7DQogICAgICAgICAg ICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICB9DQotICAgIA0KKw0KICAgICAgICAg ICAgIGlmIChpIDwgbGVuICYmIG4xLmNoYXJBdChpKSAhPSAnLicpIHsNCiAgICAgICAgICAgICAg ICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBpKys7DQotICAg IA0KKw0KICAgICAgICAgICAgIGlmIChqIDwgamxlbiAmJiBuMi5jaGFyQXQoaikgIT0gJy4nKSB7 DQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICB9DQpAQCAtMTU0 Nyw3ICsxNTQ4LDcgQEANCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHBhcnNlTXNnT3JkZXIoU3Ry aW5nIHMpIHsNCiAgICAgICAgIGludCBpLCB0Ow0KICAgICAgICAgaW50IHYgPSAwOw0KLSAgICAN CisNCiAgICAgICAgIHQgPSBzLmxlbmd0aCgpOw0KICAgICAgICAgZm9yIChpID0gMDsgaSA8IHQ7 IGkrKykgew0KICAgICAgICAgICAgIGNoYXIgYyA9IHMuY2hhckF0KGkpOw0KQEAgLTE1NTcsNyAr MTU1OCw3IEBADQogICAgICAgICAgICAgdiAqPSAyNjsNCiAgICAgICAgICAgICB2ICs9IGMgLSAn YSc7DQogICAgICAgICB9DQotICAgIA0KKw0KICAgICAgICAgcmV0dXJuIHY7DQogICAgIH0NCiAN CkBAIC0xNjQ1LDEzICsxNjQ2LDEzIEBADQogICAgIC8qKg0KICAgICAgKiBGaW5kcyB0aGUgbWVz c2FnZXMgaW4gQ29sbGVjdGlvbiBjIHRoYXQgaGFzIG1lc3NhZ2UgYSBhcyBhY3RpdmF0b3IuDQog ICAgICAqLw0KLSAgICBwcml2YXRlIENvbGxlY3Rpb248T2JqZWN0PiBmaWx0ZXJXaXRoQWN0aXZh dG9yKENvbGxlY3Rpb24gYywgDQorICAgIHByaXZhdGUgQ29sbGVjdGlvbjxPYmplY3Q+IGZpbHRl cldpdGhBY3RpdmF0b3IoQ29sbGVjdGlvbiBjLA0KICAgICAgICAgICAgIE9iamVjdC8qTU1lc3Nh Z2UqL2EpIHsNCiAgICAgICAgIExpc3Q8T2JqZWN0PiB2ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+ KCk7DQogICAgICAgICBmb3IgKE9iamVjdCBtc2cgOiBjKSB7DQogICAgICAgICAgICAgaWYgKE1v ZGVsLmdldEZhY2FkZSgpLmdldEFjdGl2YXRvcihtc2cpID09IGEpIHsNCiAgICAgICAgICAgICAg ICAgdi5hZGQobXNnKTsNCi0gICAgICAgICAgICB9ICAgICAgICAgICAgDQorICAgICAgICAgICAg fQ0KICAgICAgICAgfQ0KICAgICAgICAgcmV0dXJuIHY7DQogICAgIH0NCkBAIC0xNjY1LDcgKzE2 NjYsNyBAQA0KICAgICAgKiAgICAgICAgICAgIE1NZXNzYWdlDQogICAgICAqLw0KICAgICBwcml2 YXRlIHZvaWQgaW5zZXJ0U3VjY2Vzc29yKE9iamVjdCBtLCBPYmplY3QgcywgaW50IHApIHsNCi0g ICAgICAgIExpc3Q8T2JqZWN0PiBzdWNjZXNzb3JzID0gDQorICAgICAgICBMaXN0PE9iamVjdD4g c3VjY2Vzc29ycyA9DQogICAgICAgICAgICAgbmV3IEFycmF5TGlzdDxPYmplY3Q+KE1vZGVsLmdl dEZhY2FkZSgpLmdldFN1Y2Nlc3NvcnMobSkpOw0KICAgICAgICAgaWYgKHN1Y2Nlc3NvcnMuc2l6 ZSgpID4gcCkgew0KICAgICAgICAgICAgIHN1Y2Nlc3NvcnMuYWRkKHAsIHMpOw0KQEAgLTE2NzYs MTAgKzE2NzcsMTAgQEANCiAgICAgfQ0KIA0KICAgICAvKioNCi0gICAgICogRmluZHMgYWxsIG9w ZXJhdGlvbnMgaW4gYSBnaXZlbiBjb2xsZWN0aW9uIG9mIGNsYXNzaWZpZXJzIA0KLSAgICAgKiB3 aXRoIHRoZSBnaXZlbiBuYW1lIA0KLSAgICAgKiBhbmQgdGhlIGdpdmVuIG51bWJlciBvZiBwYXJh bWV0ZXJzLiANCi0gICAgICogSWYgbm8gb3BlcmF0aW9uIGlzIGZvdW5kLCBvbmUgaXMgY3JlYXRl ZCBpbiB0aGUgZmlyc3QgZ2l2ZW4gQ2xhc3NpZmllci4gDQorICAgICAqIEZpbmRzIGFsbCBvcGVy YXRpb25zIGluIGEgZ2l2ZW4gY29sbGVjdGlvbiBvZiBjbGFzc2lmaWVycw0KKyAgICAgKiB3aXRo IHRoZSBnaXZlbiBuYW1lDQorICAgICAqIGFuZCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHBhcmFtZXRl cnMuDQorICAgICAqIElmIG5vIG9wZXJhdGlvbiBpcyBmb3VuZCwgb25lIGlzIGNyZWF0ZWQgaW4g dGhlIGZpcnN0IGdpdmVuIENsYXNzaWZpZXIuDQogICAgICAqIFRoZSBhcHBsaWNhYmxlIG9wZXJh dGlvbnMgYXJlIHJldHVybmVkLg0KICAgICAgKg0KICAgICAgKiBAcGFyYW0gY2xhc3NpZmllcnMg dGhlIGNvbGxlY3Rpb24gb2YgY2xhc3NpZmllcnMgdG8gc2VhcmNoIGZvciBvcGVyYXRpb25zDQpA QCAtMTY4OCwxNCArMTY4OSwxNCBAQA0KICAgICAgKiBAcmV0dXJuIGEgbGlzdCBvZiB0aGUgc291 Z2h0IG9wZXJhdGlvbnMNCiAgICAgICogQHRocm93cyBQYXJzZUV4Y2VwdGlvbiBpZiB0aGUgb3Bl cmF0aW9uIHN5bnRheCBjYW4gbm90IGJlIHBhcnNlZA0KICAgICAgKi8NCi0gICAgcHJpdmF0ZSBM aXN0IGdldE9wZXJhdGlvbihDb2xsZWN0aW9uIGNsYXNzaWZpZXJzLCBTdHJpbmcgbmFtZSwgaW50 IHBhcmFtcykgDQorICAgIHByaXZhdGUgTGlzdCBnZXRPcGVyYXRpb24oQ29sbGVjdGlvbiBjbGFz c2lmaWVycywgU3RyaW5nIG5hbWUsIGludCBwYXJhbXMpDQogICAgICAgICB0aHJvd3MgUGFyc2VF eGNlcHRpb24gew0KICAgICAgICAgTGlzdDxPYmplY3Q+IG9wZXJhdGlvbnMgPSBuZXcgQXJyYXlM aXN0PE9iamVjdD4oKTsNCi0gICAgDQorDQogICAgICAgICBpZiAobmFtZSA9PSBudWxsIHx8IG5h bWUubGVuZ3RoKCkgPT0gMCkgew0KICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25zOw0KICAg ICAgICAgfQ0KLSAgICANCisNCiAgICAgICAgIGZvciAoT2JqZWN0IGNsZiA6IGNsYXNzaWZpZXJz KSB7DQogICAgICAgICAgICAgQ29sbGVjdGlvbiBvZSA9IE1vZGVsLmdldEZhY2FkZSgpLmdldEZl YXR1cmVzKGNsZik7DQogICAgICAgICAgICAgZm9yIChPYmplY3Qgb3BlcmF0aW9uIDogb2UpIHsN CkBAIC0xNzE1LDcgKzE3MTYsNyBAQA0KICAgICAgICAgaWYgKG9wZXJhdGlvbnMuc2l6ZSgpID4g MCkgew0KICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25zOw0KICAgICAgICAgfQ0KLSAgICAN CisNCiAgICAgICAgIEl0ZXJhdG9yIGl0ID0gY2xhc3NpZmllcnMuaXRlcmF0b3IoKTsNCiAgICAg ICAgIGlmIChpdC5oYXNOZXh0KCkpIHsNCiAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGV4cHIg PSBuZXcgU3RyaW5nQnVpbGRlcihuYW1lICsgIigiKTsNCkBAIC0xNzM1LDcgKzE3MzYsNyBAQA0K ICAgICAgICAgICAgICAgICBQcm9qZWN0TWFuYWdlci5nZXRNYW5hZ2VyKCkNCiAgICAgICAgICAg ICAgICAgICAgICAgICAuZ2V0Q3VycmVudFByb2plY3QoKS5nZXREZWZhdWx0UmV0dXJuVHlwZSgp Ow0KICAgICAgICAgICAgIE9iamVjdCBvcCA9IE1vZGVsLmdldENvcmVGYWN0b3J5KCkuYnVpbGRP cGVyYXRpb24oY2xzLCByZXR1cm5UeXBlKTsNCi0gICAgDQorDQogICAgICAgICAgICAgbmV3IE9w ZXJhdGlvbk5vdGF0aW9uVW1sKG9wKS5wYXJzZU9wZXJhdGlvbigNCiAgICAgICAgICAgICAgICAg ICAgICAgICBleHByLnRvU3RyaW5nKCksIG9wKTsNCiAgICAgICAgICAgICBvcGVyYXRpb25zLmFk ZChvcCk7DQpAQCAtMTc1Nyw5ICsxNzU4LDkgQEANCiAgICAgfQ0KIA0KICAgICAvKioNCi0gICAg ICogUmVjdXJzaXZlbHkgY291bnQgdGhlIG51bWJlciBvZiBwcmVkZWNlc3NvcnMgb2YgdGhlIGdp dmVuIE1lc3NhZ2UsIA0KKyAgICAgKiBSZWN1cnNpdmVseSBjb3VudCB0aGUgbnVtYmVyIG9mIHBy ZWRlY2Vzc29ycyBvZiB0aGUgZ2l2ZW4gTWVzc2FnZSwNCiAgICAgICogYW5kIHJldHVybiAoYSBw b2ludGVyIHRvKSB0aGUgZmlyc3QgTWVzc2FnZSBpbiB0aGUgY2hhaW4uDQotICAgICAqIA0KKyAg ICAgKg0KICAgICAgKiBAcGFyYW0gdW1sTWVzc2FnZSB0aGUgVU1MIE1lc3NhZ2UgdG8gY291bnQg dGhlIHByZWRlY2Vzc29ycyBmb3INCiAgICAgICogQHBhcmFtIHB0ciBhbiBvYmplY3QgdG8gY29u dGFpbiB0aGUgcmV0dXJuZWQgZmlyc3QgTWVzc2FnZQ0KICAgICAgKiBAcmV0dXJuIHRoZSBudW1i ZXIgb2YgbWVzc2FnZXMgaW4gdGhlIGNoYWluDQpAQCAtMTc3Niw5ICsxNzc3LDkgQEANCiAgICAg ICAgIH0NCiANCiAgICAgICAgIGFjdGl2YXRvciA9IE1vZGVsLmdldEZhY2FkZSgpLmdldEFjdGl2 YXRvcih1bWxNZXNzYWdlKTsNCi0gICAgICAgIGZvciAoT2JqZWN0IHByZWRlY2Vzc29yIA0KKyAg ICAgICAgZm9yIChPYmplY3QgcHJlZGVjZXNzb3INCiAgICAgICAgICAgICAgICAgOiBNb2RlbC5n ZXRGYWNhZGUoKS5nZXRQcmVkZWNlc3NvcnModW1sTWVzc2FnZSkpIHsNCi0gICAgICAgICAgICBp ZiAoTW9kZWwuZ2V0RmFjYWRlKCkuZ2V0QWN0aXZhdG9yKHByZWRlY2Vzc29yKSANCisgICAgICAg ICAgICBpZiAoTW9kZWwuZ2V0RmFjYWRlKCkuZ2V0QWN0aXZhdG9yKHByZWRlY2Vzc29yKQ0KICAg ICAgICAgICAgICAgICAgICAgIT0gYWN0aXZhdG9yKSB7DQogICAgICAgICAgICAgICAgIGNvbnRp bnVlOw0KICAgICAgICAgICAgIH0NCkBAIC0xNzk2LDUgKzE3OTcsNSBAQA0KIA0KICAgICAgICAg cmV0dXJuIE1hdGgubWF4KHByZSwgbG9jYWwpOw0KICAgICB9DQotICAgIA0KKw0KIH0NCg0KTW9k aWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvbm90YXRpb24vcHJv dmlkZXJzL3VtbC9BdHRyaWJ1dGVOb3RhdGlvblVtbC5qYXZhDQpVcmw6IGh0dHA6Ly9hcmdvdW1s LnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdvdW1sLWFwcC9z cmMvb3JnL2FyZ291bWwvbm90YXRpb24vcHJvdmlkZXJzL3VtbC9BdHRyaWJ1dGVOb3RhdGlvblVt bC5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1s L25vdGF0aW9uL3Byb3ZpZGVycy91bWwvQXR0cmlidXRlTm90YXRpb25VbWwuamF2YQkob3JpZ2lu YWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9ub3RhdGlvbi9w cm92aWRlcnMvdW1sL0F0dHJpYnV0ZU5vdGF0aW9uVW1sLmphdmEJMjAxMi0xMi0zMCAwNTowNjow MS0wODAwDQpAQCAtMSw2ICsxLDYgQEANCiAvKiAkSWQkDQogICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq DQotICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTEgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQor ICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICog QWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1h dGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVj bGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlz dHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNDIsOCArNDIsOSBAQA0KIGltcG9y dCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCiBpbXBvcnQg amF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb247DQoraW1wb3J0IGphdmEudXRpbC5sb2dn aW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQotaW1wb3J0 IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5hcHBsaWNhdGlv bi5ldmVudHMuQXJnb0V2ZW50UHVtcDsNCiBpbXBvcnQgb3JnLmFyZ291bWwuYXBwbGljYXRpb24u ZXZlbnRzLkFyZ29FdmVudFR5cGVzOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5hcHBsaWNhdGlvbi5l dmVudHMuQXJnb0hlbHBFdmVudDsNCkBAIC02MSw3ICs2Miw3IEBADQogDQogLyoqDQogICogVGhl IG5vdGF0aW9uIGZvciBhbiBhdHRyaWJ1dGUgZm9yIFVNTC4NCi0gKiANCisgKg0KICAqIEBhdXRo b3IgTWljaGllbA0KICAqLw0KIHB1YmxpYyBjbGFzcyBBdHRyaWJ1dGVOb3RhdGlvblVtbCBleHRl bmRzIEF0dHJpYnV0ZU5vdGF0aW9uIHsNCkBAIC02OSw5ICs3MCw5IEBADQogICAgIC8qKg0KICAg ICAgKiBUaGUgc3RhbmRhcmQgZXJyb3IgZXRjLiBsb2dnZXINCiAgICAgICovDQotICAgIHByaXZh dGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSANCi0gICAgICAgIExvZ2dlci5nZXRMb2dnZXIo QXR0cmlidXRlTm90YXRpb25VbWwuY2xhc3MpOw0KLSAgICANCisgICAgcHJpdmF0ZSBzdGF0aWMg ZmluYWwgTG9nZ2VyIExPRyA9DQorICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKEF0dHJpYnV0ZU5v dGF0aW9uVW1sLmNsYXNzLmdldE5hbWUoKSk7DQorDQogICAgIC8qKg0KICAgICAgKiBUaGUgY29u c3RydWN0b3IuDQogICAgICAqIEBwYXJhbSBhdHRyaWJ1dGUgdGhlIFVNTCBvYmplY3QNCkBAIC04 NSw3ICs4Niw3IEBADQogICAgICAqLw0KICAgICBwdWJsaWMgdm9pZCBwYXJzZShPYmplY3QgbW9k ZWxFbGVtZW50LCBTdHJpbmcgdGV4dCkgew0KICAgICAgICAgdHJ5IHsNCi0gICAgICAgICAgICBw YXJzZUF0dHJpYnV0ZUZpZyhNb2RlbC5nZXRGYWNhZGUoKS5nZXRPd25lcihtb2RlbEVsZW1lbnQp LCANCisgICAgICAgICAgICBwYXJzZUF0dHJpYnV0ZUZpZyhNb2RlbC5nZXRGYWNhZGUoKS5nZXRP d25lcihtb2RlbEVsZW1lbnQpLA0KICAgICAgICAgICAgICAgICAgICAgbW9kZWxFbGVtZW50LCB0 ZXh0KTsNCiAgICAgICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIHBlKSB7DQogICAgICAgICAg ICAgU3RyaW5nIG1zZyA9ICJzdGF0dXNtc2cuYmFyLmVycm9yLnBhcnNpbmcuYXR0cmlidXRlIjsN CkBAIC05NCw3ICs5NSw3IEBADQogICAgICAgICAgICAgICAgIEludGVnZXIudmFsdWVPZihwZS5n ZXRFcnJvck9mZnNldCgpKSwNCiAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgIEFyZ29FdmVu dFB1bXAuZmlyZUV2ZW50KG5ldyBBcmdvSGVscEV2ZW50KA0KLSAgICAgICAgICAgICAgICAgICAg QXJnb0V2ZW50VHlwZXMuSEVMUF9DSEFOR0VELCB0aGlzLCANCisgICAgICAgICAgICAgICAgICAg IEFyZ29FdmVudFR5cGVzLkhFTFBfQ0hBTkdFRCwgdGhpcywNCiAgICAgICAgICAgICAgICAgICAg IFRyYW5zbGF0b3IubWVzc2FnZUZvcm1hdChtc2csIGFyZ3MpKSk7DQogICAgICAgICB9DQogICAg IH0NCkBAIC0xMTgsNyArMTE5LDcgQEANCiAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICB9 DQogDQotICAgICAgICAvKiBUT0RPOiBXZSBzaG91bGQgaGF2ZSBhbGwgdGhlIGluZm9ybWF0aW9u IHRoYXQgaXMgcmVxdWlyZWQgaW4gdGhlIA0KKyAgICAgICAgLyogVE9ETzogV2Ugc2hvdWxkIGhh dmUgYWxsIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzIHJlcXVpcmVkIGluIHRoZQ0KICAgICAgICAg ICogTm90YXRpb25TZXR0aW5ncyBvYmplY3QgKi8NCiAgICAgICAgIFByb2plY3QgcHJvamVjdCA9 IFByb2plY3RNYW5hZ2VyLmdldE1hbmFnZXIoKS5nZXRDdXJyZW50UHJvamVjdCgpOw0KIA0KQEAg LTE0NiwxNCArMTQ3LDE0IEBADQogICAgICAgICAgICAgaWYgKHMubGVuZ3RoKCkgPiAwKSB7DQog ICAgICAgICAgICAgICAgIC8vIHllcywgdGhlcmUgYXJlIG1vcmU6DQogICAgICAgICAgICAgICAg IE9iamVjdCBhdHRyVHlwZSA9IHByb2plY3QuZ2V0RGVmYXVsdEF0dHJpYnV0ZVR5cGUoKTsNCi0g ICAgICAgICAgICAgICAgDQorDQogICAgICAgICAgICAgICAgIE9iamVjdCBuZXdBdHRyaWJ1dGUg PSBNb2RlbC5nZXRVbWxGYWN0b3J5KCkuYnVpbGROb2RlKA0KICAgICAgICAgICAgICAgICAgICAg ICAgIE1vZGVsLmdldE1ldGFUeXBlcygpLmdldEF0dHJpYnV0ZSgpKTsNCi0gICAgICAgICAgICAg ICAgDQorDQogICAgICAgICAgICAgICAgIE1vZGVsLmdldENvcmVIZWxwZXIoKS5zZXRUeXBlKG5l d0F0dHJpYnV0ZSwgYXR0clR5cGUpOw0KLSAgICAgICAgICAgICAgICANCisNCiAgICAgICAgICAg ICAgICAgaWYgKG5ld0F0dHJpYnV0ZSAhPSBudWxsKSB7DQotICAgICAgICAgICAgICAgICAgICAv KiBXZSBuZWVkIHRvIHNldCB0aGUgbmFtZXNwYWNlL293bmVyIA0KKyAgICAgICAgICAgICAgICAg ICAgLyogV2UgbmVlZCB0byBzZXQgdGhlIG5hbWVzcGFjZS9vd25lcg0KICAgICAgICAgICAgICAg ICAgICAgICogb2YgdGhlIG5ldyBhdHRyaWJ1dGUgYmVmb3JlIHBhcnNpbmc6ICovDQogICAgICAg ICAgICAgICAgICAgICBpZiAoaSAhPSAtMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgIE1v ZGVsLmdldENvcmVIZWxwZXIoKS5hZGRGZWF0dXJlKA0KQEAgLTE2NCw3ICsxNjUsNyBAQA0KICAg ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAg ICAgICAgICAgICAgICAgICBwYXJzZUF0dHJpYnV0ZShzLCBuZXdBdHRyaWJ1dGUpOw0KLSAgICAg ICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZSAxc3QgYXR0cmlidXRlIGlzIHN0YXRpYywgDQor ICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhlIDFzdCBhdHRyaWJ1dGUgaXMgc3RhdGlj LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZW4gdGhlIG5ldyBvbmVzLCB0b28uICov DQogICAgICAgICAgICAgICAgICAgICAgICAgTW9kZWwuZ2V0Q29yZUhlbHBlcigpLnNldFN0YXRp YygNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0F0dHJpYnV0ZSwNCkBAIC0x OTAsNyArMTkxLDcgQEANCiAgICAgICogPC9wcmU+DQogICAgICAqDQogICAgICAqIDx1bD4NCi0g ICAgICogPGxpPlRoZSAvIGZvciBkZXJpdmVkIGlzIG9wdGlvbmFsIGJ1dCBoYXMgdG8gYmUgdGhl IGZpcnN0IG5vbi13aGl0ZSANCisgICAgICogPGxpPlRoZSAvIGZvciBkZXJpdmVkIGlzIG9wdGlv bmFsIGJ1dCBoYXMgdG8gYmUgdGhlIGZpcnN0IG5vbi13aGl0ZQ0KICAgICAgKiBjaGFyYWN0ZXIu DQogICAgICAqIDxsaT5JZiBvbmx5IG9uZSBvZiB2aXNpYmlsaXR5IGFuZCBuYW1lIGlzIGdpdmVu LCB0aGVuIGl0IGlzIGFzc3VtZWQgdG8NCiAgICAgICogYmUgdGhlIG5hbWUgYW5kIHRoZSB2aXNp YmlsaXR5IGlzIGxlZnQgdW5jaGFuZ2VkLg0KQEAgLTIxOCw3ICsyMTksNyBAQA0KICAgICAgKiB0 eXBlIG5hbWUgWz0gaW5pdF0gWztdICkNCiAgICAgICoNCiAgICAgICogQHBhcmFtIHRleHQgICAg VGhlIFN0cmluZyB0byBwYXJzZS4NCi0gICAgICogQHBhcmFtIGF0dHJpYnV0ZSBUaGUgYXR0cmli dXRlIHRvIG1vZGlmeSB0byBjb21wbHkgDQorICAgICAqIEBwYXJhbSBhdHRyaWJ1dGUgVGhlIGF0 dHJpYnV0ZSB0byBtb2RpZnkgdG8gY29tcGx5DQogICAgICAqICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2l0aCB0aGUgaW5zdHJ1Y3Rpb25zIGluIHMuDQogICAgICAqIEB0aHJvd3MgUGFyc2VF eGNlcHRpb24NCiAgICAgICogICAgICAgICAgICAgd2hlbiBpdCBkZXRlY3RzIGFuIGVycm9yIGlu IHRoZSBhdHRyaWJ1dGUgc3RyaW5nLiBTZWUgYWxzbw0KQEAgLTI1MiwxNSArMjUzLDE1IEBADQog ICAgICAgICB9DQogDQogICAgICAgICAvKiBIYW5kbGUgVmlzaWJpbGl0eTogKi8NCi0gICAgICAg IGlmICh0ZXh0Lmxlbmd0aCgpID4gMCANCi0gICAgICAgICAgICAgICAgJiYgTm90YXRpb25VdGls aXR5VW1sLlZJU0lCSUxJVFlDSEFSUy5pbmRleE9mKHRleHQuY2hhckF0KDApKSANCisgICAgICAg IGlmICh0ZXh0Lmxlbmd0aCgpID4gMA0KKyAgICAgICAgICAgICAgICAmJiBOb3RhdGlvblV0aWxp dHlVbWwuVklTSUJJTElUWUNIQVJTLmluZGV4T2YodGV4dC5jaGFyQXQoMCkpDQogICAgICAgICAg ICAgICAgICAgICA+PSAwKSB7DQogICAgICAgICAgICAgdmlzaWJpbGl0eSA9IHRleHQuc3Vic3Ry aW5nKDAsIDEpOw0KICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygxKTsNCiAgICAg ICAgIH0NCiANCiAgICAgICAgIHRyeSB7DQotICAgICAgICAgICAgc3QgPSBuZXcgTXlUb2tlbml6 ZXIodGV4dCwgDQorICAgICAgICAgICAgc3QgPSBuZXcgTXlUb2tlbml6ZXIodGV4dCwNCiAgICAg ICAgICAgICAgICAgICAgICIgLFx0LDw8LFx1MDBBQixcdTAwQkIsPj4sWyxdLDosPSx7LH0sXFws IiwNCiAgICAgICAgICAgICAgICAgICAgIE5vdGF0aW9uVXRpbGl0eVVtbC5hdHRyaWJ1dGVDdXN0 b21TZXApOw0KICAgICAgICAgICAgIHdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpIHsNCkBAIC0y NzUsNyArMjc2LDcgQEANCiAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5hcHBlbmQodG9r ZW4pOw0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoc3RlcmVvdHlwZSAhPSBudWxsKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFN0cmluZyBtc2cgPSANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1z ZyA9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyc2luZy5lcnJvci5hdHRy aWJ1dGUudHdvLXNldHMtc3RlcmVvdHlwZXMiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24oVHJhbnNsYXRvci5sb2NhbGl6ZShtc2cpLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0LmdldFRva2VuSW5kZXgoKSk7DQpA QCAtMjk0LDcgKzI5NSw3IEBADQogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuYXBwZW5k KHRva2VuKTsNCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKG11bHRpcGxpY2l0eSAhPSBudWxsKSB7DQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFN0cmluZyBtc2cgPSANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Ry aW5nIG1zZyA9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyc2luZy5lcnJv ci5hdHRyaWJ1dGUudHdvLW11bHRpcGxpY2l0aWVzIjsNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uKFRyYW5zbGF0b3IubG9jYWxpemUobXNnKSwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC5nZXRUb2tlbkluZGV4KCkp Ow0KQEAgLTMzMSw3ICszMzIsNyBAQA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQog ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgiPSIuZXF1YWxzKHRva2VuKSkgew0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcHZhbHVlICE9IG51bGwpIHsNCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtc2cgPSANCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtc2cgPQ0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJwYXJzaW5nLmVycm9yLmF0dHJpYnV0ZS5wcm9wLXR3by12YWx1ZXMi Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0W10gYXJncyA9IHtwcm9w dmFsdWV9Ow0KIA0KQEAgLTM1NCw3ICszNTUsNyBAQA0KICAgICAgICAgICAgICAgICAgICAgaGFz RXEgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgiPSIuZXF1YWxzKHRva2Vu KSkgew0KICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsNCi0gICAgICAg ICAgICAgICAgICAgICAgICBTdHJpbmcgbXNnID0gDQorICAgICAgICAgICAgICAgICAgICAgICAg U3RyaW5nIG1zZyA9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJzaW5nLmVycm9y LmF0dHJpYnV0ZS50d28tZGVmYXVsdC12YWx1ZXMiOw0KICAgICAgICAgICAgICAgICAgICAgICAg IHRocm93IG5ldyBQYXJzZUV4Y2VwdGlvbihUcmFuc2xhdG9yLmxvY2FsaXplKG1zZyksIHN0DQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0VG9rZW5JbmRleCgpKTsNCkBAIC00 MjQsMjEgKzQyNSwyMiBAQA0KICAgICAgICAgfSBjYXRjaCAoTm9TdWNoRWxlbWVudEV4Y2VwdGlv biBuc2VlKSB7DQogICAgICAgICAgICAgU3RyaW5nIG1zZyA9ICJwYXJzaW5nLmVycm9yLmF0dHJp YnV0ZS51bmV4cGVjdGVkLWVuZC1hdHRyaWJ1dGUiOw0KICAgICAgICAgICAgIHRocm93IG5ldyBQ YXJzZUV4Y2VwdGlvbihUcmFuc2xhdG9yLmxvY2FsaXplKG1zZyksIHRleHQubGVuZ3RoKCkpOw0K LSAgICAgICAgfSANCisgICAgICAgIH0NCiAgICAgICAgIC8vIGNhdGNoICYgcmV0aHJvdyBpcyBu b3QgbmVjZXNzYXJ5IGlmIHdlIGRvbid0IGRvIG5vdGhpbmcgKHBlbnlhc2tpdG8pDQogICAgICAg ICAvLyBjYXRjaCAoUGFyc2VFeGNlcHRpb24gcHJlKSB7DQogICAgICAgICAvLyAgICAgIHRocm93 IHByZTsNCiAgICAgICAgIC8vIH0NCiANCi0gICAgICAgIGlmIChMT0cuaXNEZWJ1Z0VuYWJsZWQo KSkgew0KLSAgICAgICAgICAgIExPRy5kZWJ1ZygiUGFyc2VBdHRyaWJ1dGUgW25hbWU6ICIgKyBu YW1lIA0KLSAgICAgICAgICAgICAgICAgICAgKyAiIHZpc2liaWxpdHk6ICIgKyB2aXNpYmlsaXR5 IA0KLSAgICAgICAgICAgICAgICAgICAgKyAiIHR5cGU6ICIgKyB0eXBlICsgIiB2YWx1ZTogIiAr IHZhbHVlIA0KKyAgICAgICAgaWYgKExPRy5pc0xvZ2dhYmxlKExldmVsLkZJTkUpKSB7DQorICAg ICAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiUGFyc2VBdHRyaWJ1dGUgW25hbWU6ICIgKyBu YW1lDQorICAgICAgICAgICAgICAgICAgICArICIgdmlzaWJpbGl0eTogIiArIHZpc2liaWxpdHkN CisgICAgICAgICAgICAgICAgICAgICsgIiB0eXBlOiAiICsgdHlwZSArICIgdmFsdWU6ICIgKyB2 YWx1ZQ0KICAgICAgICAgICAgICAgICAgICAgKyAiIHN0ZXJlbzogIiArIHN0ZXJlb3R5cGUNCiAg ICAgICAgICAgICAgICAgICAgICsgIiBtdWx0OiAiICsgbXVsdGlwbGljaXR5KTsNCiAgICAgICAg ICAgICBpZiAocHJvcGVydGllcyAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAgIGZvciAoaW50 IGkgPSAwOyBpICsgMSA8IHByb3BlcnRpZXMuc2l6ZSgpOyBpICs9IDIpIHsNCi0gICAgICAgICAg ICAgICAgICAgIExPRy5kZWJ1ZygiXHRQcm9wZXJ0eSBbbmFtZTogIiArIHByb3BlcnRpZXMuZ2V0 KGkpICsgIiA9ICINCisgICAgICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx0UHJvcGVydHkgW25hbWU6ICIgKyBwcm9wZXJ0 aWVzLmdldChpKSArICIgPSAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcHJvcGVy dGllcy5nZXQoaSArIDEpICsgIl0iKTsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg IH0NCkBAIC00ODIsNyArNDg0LDcgQEANCiANCiAgICAgcHJpdmF0ZSB2b2lkIGRlYWxXaXRoVmFs dWUoT2JqZWN0IGF0dHJpYnV0ZSwgU3RyaW5nQnVpbGRlciB2YWx1ZSkgew0KICAgICAgICAgaWYg KHZhbHVlICE9IG51bGwpIHsNCi0gICAgICAgICAgICBQcm9qZWN0IHByb2plY3QgPSANCisgICAg ICAgICAgICBQcm9qZWN0IHByb2plY3QgPQ0KICAgICAgICAgICAgICAgICBQcm9qZWN0TWFuYWdl ci5nZXRNYW5hZ2VyKCkuZ2V0Q3VycmVudFByb2plY3QoKTsNCiAgICAgICAgICAgICBQcm9qZWN0 U2V0dGluZ3MgcHMgPSBwcm9qZWN0LmdldFByb2plY3RTZXR0aW5ncygpOw0KICAgICAgICAgICAg IE9iamVjdCBpbml0RXhwciA9IE1vZGVsLmdldERhdGFUeXBlc0ZhY3RvcnkoKS5jcmVhdGVFeHBy ZXNzaW9uKA0KQEAgLTUwMCw3ICs1MDIsNyBAQA0KICAgICAgICAgICAgIH0gZWxzZSB7DQogICAg ICAgICAgICAgICAgIG5zID0gTW9kZWwuZ2V0RmFjYWRlKCkuZ2V0Um9vdChhdHRyaWJ1dGUpOw0K ICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBNb2RlbC5nZXRDb3JlSGVscGVyKCkuc2V0VHlw ZShhdHRyaWJ1dGUsIA0KKyAgICAgICAgICAgIE1vZGVsLmdldENvcmVIZWxwZXIoKS5zZXRUeXBl KGF0dHJpYnV0ZSwNCiAgICAgICAgICAgICAgICAgICAgIE5vdGF0aW9uVXRpbGl0eVVtbC5nZXRU eXBlKHR5cGUudHJpbSgpLCBucykpOw0KICAgICAgICAgfQ0KICAgICB9DQpAQCAtNTQ0LDEyICs1 NDYsMTIgQEANCiAgICAgICogRGVwZW5kaW5nIG9uIHNldHRpbmdzIGluIE5vdGF0aW9uLCB2aXNp YmlsaXR5LCBtdWx0aXBsaWNpdHksDQogICAgICAqIHR5cGUtZXhwcmVzc2lvbiwgaW5pdGlhbCB2 YWx1ZSBhbmQgcHJvcGVydGllcyBhcmUgc2hvd24vbm90IHNob3duLg0KICAgICAgKi8NCi0gICAg cHJpdmF0ZSBTdHJpbmcgdG9TdHJpbmcoT2JqZWN0IG1vZGVsRWxlbWVudCwgYm9vbGVhbiB1c2VH dWlsbGVtZXRzLCANCisgICAgcHJpdmF0ZSBTdHJpbmcgdG9TdHJpbmcoT2JqZWN0IG1vZGVsRWxl bWVudCwgYm9vbGVhbiB1c2VHdWlsbGVtZXRzLA0KICAgICAgICAgICAgIGJvb2xlYW4gc2hvd1Zp c2liaWxpdHksIGJvb2xlYW4gc2hvd011bHRpcGxpY2l0eSwgYm9vbGVhbiBzaG93VHlwZXMsDQog ICAgICAgICAgICAgYm9vbGVhbiBzaG93SW5pdGlhbFZhbHVlcywgYm9vbGVhbiBzaG93UHJvcGVy dGllcykgew0KICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICBTdHJpbmcgZGVyaXZlZCA9ICIi Ow0KLSAgICAgICAgICAgIE9iamVjdCB0diA9IE1vZGVsLmdldEZhY2FkZSgpLmdldFRhZ2dlZFZh bHVlKG1vZGVsRWxlbWVudCwgDQorICAgICAgICAgICAgT2JqZWN0IHR2ID0gTW9kZWwuZ2V0RmFj YWRlKCkuZ2V0VGFnZ2VkVmFsdWUobW9kZWxFbGVtZW50LA0KICAgICAgICAgICAgICAgICAgICAg RmFjYWRlLkRFUklWRURfVEFHKTsNCiAgICAgICAgICAgICBpZiAodHYgIT0gbnVsbCkgew0KICAg ICAgICAgICAgICAgICBTdHJpbmcgdGFnID0gTW9kZWwuZ2V0RmFjYWRlKCkuZ2V0VmFsdWVPZlRh Zyh0dik7DQpAQCAtNTU3LDggKzU1OSw4IEBADQogICAgICAgICAgICAgICAgICAgICBkZXJpdmVk ID0gIi8iOw0KICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0KLSAgICAgICAgICAg IA0KLSAgICAgICAgICAgIFN0cmluZyBzdGVyZW8gPSBOb3RhdGlvblV0aWxpdHlVbWwuZ2VuZXJh dGVTdGVyZW90eXBlKG1vZGVsRWxlbWVudCwgDQorDQorICAgICAgICAgICAgU3RyaW5nIHN0ZXJl byA9IE5vdGF0aW9uVXRpbGl0eVVtbC5nZW5lcmF0ZVN0ZXJlb3R5cGUobW9kZWxFbGVtZW50LA0K ICAgICAgICAgICAgICAgICAgICAgdXNlR3VpbGxlbWV0cyk7DQogICAgICAgICAgICAgU3RyaW5n IG5hbWUgPSBNb2RlbC5nZXRGYWNhZGUoKS5nZXROYW1lKG1vZGVsRWxlbWVudCk7DQogICAgICAg ICAgICAgU3RyaW5nIG11bHRpcGxpY2l0eSA9IGdlbmVyYXRlTXVsdGlwbGljaXR5KA0KQEAgLTYw Miw3ICs2MDQsNyBAQA0KICAgICAgICAgICAgIGlmIChzaG93SW5pdGlhbFZhbHVlcykgew0KICAg ICAgICAgICAgICAgICBPYmplY3QgaXYgPSBNb2RlbC5nZXRGYWNhZGUoKS5nZXRJbml0aWFsVmFs dWUobW9kZWxFbGVtZW50KTsNCiAgICAgICAgICAgICAgICAgaWYgKGl2ICE9IG51bGwpIHsNCi0g ICAgICAgICAgICAgICAgICAgIFN0cmluZyBpbml0aWFsVmFsdWUgPSANCisgICAgICAgICAgICAg ICAgICAgIFN0cmluZyBpbml0aWFsVmFsdWUgPQ0KICAgICAgICAgICAgICAgICAgICAgICAgIChT dHJpbmcpIE1vZGVsLmdldEZhY2FkZSgpLmdldEJvZHkoaXYpOw0KICAgICAgICAgICAgICAgICAg ICAgaWYgKGluaXRpYWxWYWx1ZSAhPSBudWxsICYmIGluaXRpYWxWYWx1ZS5sZW5ndGgoKSA+IDAp IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIiA9ICIpLmFwcGVuZChpbml0 aWFsVmFsdWUpLmFwcGVuZCgiICIpOw0KQEAgLTYzNSw3ICs2MzcsNyBAQA0KICAgICAgICAgICAg IHJldHVybiAiIjsNCiAgICAgICAgIH0NCiAgICAgfQ0KLSAgICANCisNCiAgICAgcHJpdmF0ZSBz dGF0aWMgU3RyaW5nIGdlbmVyYXRlTXVsdGlwbGljaXR5KE9iamVjdCBtKSB7DQogICAgICAgICBp ZiAobSA9PSBudWxsIHx8ICIxIi5lcXVhbHMoTW9kZWwuZ2V0RmFjYWRlKCkudG9TdHJpbmcobSkp KSB7DQogICAgICAgICAgICAgcmV0dXJuICIiOw0KDQpNb2RpZmllZDogdHJ1bmsvc3JjL2FyZ291 bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9ub3RhdGlvbi9wcm92aWRlcnMvdW1sL01lc3NhZ2VOb3Rh dGlvblVtbC5qYXZhDQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dz ZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvbm90YXRpb24v cHJvdmlkZXJzL3VtbC9NZXNzYWdlTm90YXRpb25VbWwuamF2YT92aWV3PWRpZmYmcGF0aHJldj0x OTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsv c3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9ub3RhdGlvbi9wcm92aWRlcnMvdW1sL01l c3NhZ2VOb3RhdGlvblVtbC5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1h cHAvc3JjL29yZy9hcmdvdW1sL25vdGF0aW9uL3Byb3ZpZGVycy91bWwvTWVzc2FnZU5vdGF0aW9u VW1sLmphdmEJMjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMSw2ICsxLDYgQEANCiAvKiAk SWQkDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA5IENvbnRy aWJ1dG9ycyAtIHNlZSBiZWxvdw0KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEyIENvbnRyaWJ1 dG9ycyAtIHNlZSBiZWxvdw0KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBh bmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAgKiB3aGlj aCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KQEAg LTM4LDIyICszOCwxNCBAQA0KIA0KIHBhY2thZ2Ugb3JnLmFyZ291bWwubm90YXRpb24ucHJvdmlk ZXJzLnVtbDsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9y Zy5hcmdvdW1sLm5vdGF0aW9uLk5vdGF0aW9uU2V0dGluZ3M7DQogDQogLyoqDQotICogVGhlIFVN TCBub3RhdGlvbiBmb3IgYSBtZXNzYWdlLCBhcyBzaG93biBvbiBhIGNvbGxhYm9yYXRpb24gZGlh Z3JhbS4gDQotICogDQorICogVGhlIFVNTCBub3RhdGlvbiBmb3IgYSBtZXNzYWdlLCBhcyBzaG93 biBvbiBhIGNvbGxhYm9yYXRpb24gZGlhZ3JhbS4NCisgKg0KICAqIEBhdXRob3IgbWljaGllbA0K ICAqLw0KIHB1YmxpYyBjbGFzcyBNZXNzYWdlTm90YXRpb25VbWwgZXh0ZW5kcyBBYnN0cmFjdE1l c3NhZ2VOb3RhdGlvblVtbCB7DQotDQotICAgIC8qKg0KLSAgICAgKiBUaGUgc3RhbmRhcmQgZXJy b3IgZXRjLiBsb2dnZXINCi0gICAgICovDQotICAgIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0N Ci0gICAgICAgIExvZ2dlci5nZXRMb2dnZXIoTWVzc2FnZU5vdGF0aW9uVW1sLmNsYXNzKTsNCi0N CiAgICAgLyoqDQogICAgICAqIFRoZSBjb25zdHJ1Y3Rvci4NCiAgICAgICoNCg0KTW9kaWZpZWQ6 IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvbm90YXRpb24vdWkvTm90YXRp b25Db21ib0JveC5qYXZhDQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jy b3dzZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvbm90YXRp b24vdWkvTm90YXRpb25Db21ib0JveC5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5 OTA2JnIyPTE5OTA3DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3Vt bC1hcHAvc3JjL29yZy9hcmdvdW1sL25vdGF0aW9uL3VpL05vdGF0aW9uQ29tYm9Cb3guamF2YQko b3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9ub3Rh dGlvbi91aS9Ob3RhdGlvbkNvbWJvQm94LmphdmEJMjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpA QCAtMSw2ICsxLDYgQEANCiAvKiAkSWQkDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29w eXJpZ2h0IChjKSAyMDA5IENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KKyAqIENvcHlyaWdodCAo YykgMjAwOS0yMDEyIENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KICAqIEFsbCByaWdodHMgcmVz ZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAgKiBh cmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBM aWNlbnNlIHYxLjANCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5k IGlzIGF2YWlsYWJsZSBhdA0KQEAgLTM5LDEwICszOSwxMSBAQA0KIHBhY2thZ2Ugb3JnLmFyZ291 bWwubm90YXRpb24udWk7DQogaW1wb3J0IGphdmEuYXd0LkRpbWVuc2lvbjsNCiBpbXBvcnQgamF2 YS51dGlsLkxpc3RJdGVyYXRvcjsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQor aW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiANCiBpbXBvcnQgamF2YXguc3dpbmcu SkNvbWJvQm94Ow0KIA0KLWltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsNCiBpbXBvcnQg b3JnLmFyZ291bWwuYXBwbGljYXRpb24uZXZlbnRzLkFyZ29FdmVudFB1bXA7DQogaW1wb3J0IG9y Zy5hcmdvdW1sLmFwcGxpY2F0aW9uLmV2ZW50cy5BcmdvRXZlbnRUeXBlczsNCiBpbXBvcnQgb3Jn LmFyZ291bWwuYXBwbGljYXRpb24uZXZlbnRzLkFyZ29Ob3RhdGlvbkV2ZW50Ow0KQEAgLTYzLDcg KzY0LDggQEANCiAgICAgLyoqDQogICAgICAqIExvZ2dlci4NCiAgICAgICovDQotICAgIHByaXZh dGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5vdGF0aW9uQ29t Ym9Cb3guY2xhc3MpOw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCisg ICAgICAgIExvZ2dlci5nZXRMb2dnZXIoTm90YXRpb25Db21ib0JveC5jbGFzcy5nZXROYW1lKCkp Ow0KIA0KICAgICAvKioNCiAgICAgICogVGhlIGluc3RhbmNlLg0KQEAgLTEwMiwxNCArMTA0LDE0 IEBADQogICAgICAqLw0KICAgICBwdWJsaWMgdm9pZCBub3RhdGlvbkNoYW5nZWQoQXJnb05vdGF0 aW9uRXZlbnQgZXZlbnQpIHsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgLyoNCiAgICAgICogQHNl ZSBvcmcuYXJnb3VtbC5hcHBsaWNhdGlvbi5ldmVudHMuQXJnb05vdGF0aW9uRXZlbnRMaXN0ZW5l ciNub3RhdGlvbkFkZGVkKG9yZy5hcmdvdW1sLmFwcGxpY2F0aW9uLmV2ZW50cy5BcmdvTm90YXRp b25FdmVudCkNCiAgICAgICovDQogICAgIHB1YmxpYyB2b2lkIG5vdGF0aW9uQWRkZWQoQXJnb05v dGF0aW9uRXZlbnQgZXZlbnQpIHsNCiAgICAgICAgIHJlZnJlc2goKTsNCiAgICAgfQ0KLSAgICAN CisNCiAgICAgLyoNCiAgICAgICogQHNlZSBvcmcuYXJnb3VtbC5hcHBsaWNhdGlvbi5ldmVudHMu QXJnb05vdGF0aW9uRXZlbnRMaXN0ZW5lciNub3RhdGlvblJlbW92ZWQob3JnLmFyZ291bWwuYXBw bGljYXRpb24uZXZlbnRzLkFyZ29Ob3RhdGlvbkV2ZW50KQ0KICAgICAgKi8NCkBAIC0xNDAsNyAr MTQyLDcgQEANCiAgICAgICAgICAgICAgICAgTm90YXRpb25OYW1lIG5uID0gKE5vdGF0aW9uTmFt ZSkgaXRlcmF0b3IubmV4dCgpOw0KICAgICAgICAgICAgICAgICBhZGRJdGVtKG5uKTsNCiAgICAg ICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgew0KLSAgICAgICAgICAgICAgICBMT0cuZXJy b3IoIlVuZXhwZWN0ZWQgZXhjZXB0aW9uIiwgZSk7DQorICAgICAgICAgICAgICAgIExPRy5sb2co TGV2ZWwuU0VWRVJFLCAiVW5leHBlY3RlZCBleGNlcHRpb24iLCBlKTsNCiAgICAgICAgICAgICB9 DQogICAgICAgICB9DQogICAgICAgICBzZXRWaXNpYmxlKHRydWUpOw0KDQpNb2RpZmllZDogdHJ1 bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9vY2wvQXJnb0ZhY2FkZS5qYXZhDQpV cmw6IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5r L3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvb2NsL0FyZ29GYWNhZGUuamF2YT92aWV3 PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9vY2wvQXJnb0Zh Y2FkZS5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9h cmdvdW1sL29jbC9BcmdvRmFjYWRlLmphdmEJMjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAt MSw2ICsxLDYgQEANCiAvKiAkSWQkDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJp Z2h0IChjKSAyMDA5IENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KKyAqIENvcHlyaWdodCAoYykg MjAwOS0yMDEyIENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KICAqIEFsbCByaWdodHMgcmVzZXJ2 ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAgKiBhcmUg bWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNl bnNlIHYxLjANCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlz IGF2YWlsYWJsZSBhdA0KQEAgLTQwLDggKzQwLDkgQEANCiANCiBpbXBvcnQgamF2YS51dGlsLkNv bGxlY3Rpb247DQogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsNCitpbXBvcnQgamF2YS51dGls LmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiANCi1p bXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmtlcm5l bC5Qcm9qZWN0Ow0KIGltcG9ydCBvcmcuYXJnb3VtbC5rZXJuZWwuUHJvamVjdE1hbmFnZXI7DQog aW1wb3J0IG9yZy5hcmdvdW1sLm1vZGVsLk1vZGVsOw0KQEAgLTExMCw3ICsxMTEsNyBAQA0KICAg ICAvKioNCiAgICAgICogTG9nZ2VyIGZvciB0aGUgQXJnb0FueSBjbGFzcy4NCiAgICAgICovDQot ICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dnZXIuZ2V0TG9nZ2VyKEFy Z29BbnkuY2xhc3MpOw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9n Z2VyLmdldExvZ2dlcihBcmdvQW55LmNsYXNzLmdldE5hbWUoKSk7DQogDQogICAgIHByaXZhdGUg T2JqZWN0IGNsYXNzaWZpZXI7DQogDQpAQCAtMTkwLDcgKzE5MSw3IEBADQogCQkgICAgJiYgKE1v ZGVsLmdldEZhY2FkZSgpLmdldFVwcGVyKG11bHRpcGxpY2l0eSkgPiAxDQogCQkJfHwgTW9kZWwu Z2V0RmFjYWRlKCkuZ2V0VXBwZXIobXVsdGlwbGljaXR5KQ0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgID09IC0xKSkgew0KLQkJICAgIGlmIChNb2RlbC5nZXRFeHRlbnNpb25NZWNoYW5pc21z SGVscGVyKCkuaGFzU3RlcmVvdHlwZShhZSwgDQorCQkgICAgaWYgKE1vZGVsLmdldEV4dGVuc2lv bk1lY2hhbmlzbXNIZWxwZXIoKS5oYXNTdGVyZW90eXBlKGFlLA0KIAkJICAgICAgICAgICAgIm9y ZGVyZWQiKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VxdWVuY2UgPSB0cnVlOw0K ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCkBAIC0yOTcsMjIgKzI5OCwyMiBAQA0KIAkg ICAgfQ0KIAl9DQogDQotICAgICAgICBDb2xsZWN0aW9uIHJldHVyblBhcmFtcyA9IA0KKyAgICAg ICAgQ29sbGVjdGlvbiByZXR1cm5QYXJhbXMgPQ0KICAgICAgICAgICAgIE1vZGVsLmdldENvcmVI ZWxwZXIoKS5nZXRSZXR1cm5QYXJhbWV0ZXJzKGZvdW5kT3ApOw0KICAgICAgICAgT2JqZWN0IHJw Ow0KICAgICAgICAgaWYgKHJldHVyblBhcmFtcy5zaXplKCkgPT0gMCkgew0KICAgICAgICAgICAg IHJwID0gbnVsbDsNCiAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgcnAgPSByZXR1cm5Q YXJhbXMuaXRlcmF0b3IoKS5uZXh0KCk7DQotICAgICAgICB9IA0KKyAgICAgICAgfQ0KICAgICAg ICAgaWYgKHJldHVyblBhcmFtcy5zaXplKCkgPiAxKSAgew0KLSAgICAgICAgICAgIExPRy53YXJu KCJPQ0wgY29tcGlsZXIgb25seSBoYW5kbGVzIG9uZSByZXR1cm4gcGFyYW1ldGVyIg0KKyAgICAg ICAgICAgIExPRy5sb2coTGV2ZWwuV0FSTklORywgIk9DTCBjb21waWxlciBvbmx5IGhhbmRsZXMg b25lIHJldHVybiBwYXJhbWV0ZXIiDQogICAgICAgICAgICAgICAgICAgICArICIgLSBGb3VuZCAi ICsgcmV0dXJuUGFyYW1zLnNpemUoKQ0KICAgICAgICAgICAgICAgICAgICAgKyAiIGZvciAiICsg TW9kZWwuZ2V0RmFjYWRlKCkuZ2V0TmFtZShmb3VuZE9wKSk7DQogICAgICAgICB9DQogDQogCWlm IChycCA9PSBudWxsIHx8IE1vZGVsLmdldEZhY2FkZSgpLmdldFR5cGUocnApID09IG51bGwpIHsN Ci0JICAgIExPRy53YXJuKCJXQVJOSU5HOiBzdXBwb3NpbmcgcmV0dXJuIHR5cGUgdm9pZCEiKTsN CisgICAgICAgICAgICBMT0cubG9nKExldmVsLldBUk5JTkcsICJXQVJOSU5HOiBzdXBwb3Npbmcg cmV0dXJuIHR5cGUgdm9pZCEiKTsNCiAJICAgIHJldHVybiBuZXcgQXJnb0FueShudWxsKTsNCiAJ fQ0KIAlPYmplY3QgcmV0dXJuVHlwZSA9IE1vZGVsLmdldEZhY2FkZSgpLmdldFR5cGUocnApOw0K QEAgLTM2OSw4ICszNzAsOSBAQA0KICAgICAgKiBAc2VlIHR1ZHJlc2Rlbi5vY2wuY2hlY2sudHlw ZXMuVHlwZSNoYXNTdGF0ZShqYXZhLmxhbmcuU3RyaW5nKQ0KICAgICAgKi8NCiAgICAgcHVibGlj IGJvb2xlYW4gaGFzU3RhdGUoU3RyaW5nIG5hbWUpIHsNCi0JTE9HLndhcm4oIkFyZ29BbnkuaGFz U3RhdGUoKSBoYXMgYmVlbiBjYWxsZWQsIGJ1dCBpcyAiDQotCQkgKyAibm90IGltcGxlbWVudGVk IHlldCEiKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuV0FSTklORywNCisgICAgICAgICAgICAg ICAgIkFyZ29BbnkuaGFzU3RhdGUoKSBoYXMgYmVlbiBjYWxsZWQsIGJ1dCBpcyAiDQorICAgICAg ICAgICAgICAgICsgIm5vdCBpbXBsZW1lbnRlZCB5ZXQhIik7DQogCXJldHVybiBmYWxzZTsNCiAg ICAgfQ0KIA0KQEAgLTQyMiw3ICs0MjQsNyBAQA0KICAgICAgICAgICAgICAgICBNb2RlbC5nZXRG YWNhZGUoKS5nZXRQYXJhbWV0ZXJzKG9wZXJhdGlvbik7DQogCWlmICghTW9kZWwuZ2V0RmFjYWRl KCkuaXNSZXR1cm4oDQogICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uUGFyYW1ldGVy cy5pdGVyYXRvcigpLm5leHQoKSkpIHsNCi0JICAgIExPRy53YXJuKA0KKyAgICAgICAgICAgIExP Ry5sb2coTGV2ZWwuV0FSTklORywNCiAgICAgICAgICAgICAgICAgIkFyZ29GYWNhZGUkQXJnb0Fu eSBleHBlY3RzIHRoZSBmaXJzdCBvcGVyYXRpb24gcGFyYW1ldGVyICINCiAJCSsgInRvIGJlIHRo ZSByZXR1cm4gdHlwZTsgdGhpcyBpc24ndCB0aGUgY2FzZSINCiAJICAgICk7DQoNCk1vZGlmaWVk OiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3BlcnNpc3RlbmNlL0Fic3Ry YWN0RmlsZVBlcnNpc3Rlci5qYXZhDQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291 cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwv cGVyc2lzdGVuY2UvQWJzdHJhY3RGaWxlUGVyc2lzdGVyLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9 MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5r L3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcGVyc2lzdGVuY2UvQWJzdHJhY3RGaWxl UGVyc2lzdGVyLmphdmEJKG9yaWdpbmFsKQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMv b3JnL2FyZ291bWwvcGVyc2lzdGVuY2UvQWJzdHJhY3RGaWxlUGVyc2lzdGVyLmphdmEJMjAxMi0x Mi0zMCAwNTowNjowMS0wODAwDQpAQCAtNDYsMTEgKzQ2LDEyIEBADQogaW1wb3J0IGphdmEuaW8u SU9FeGNlcHRpb247DQogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KIGltcG9ydCBqYXZhLnV0 aWwuTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51 dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KIA0KIGltcG9ydCBqYXZheC5zd2luZy5ldmVudC5FdmVudExp c3RlbmVyTGlzdDsNCiBpbXBvcnQgamF2YXguc3dpbmcuZmlsZWNob29zZXIuRmlsZUZpbHRlcjsN CiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1s LmNvbmZpZ3VyYXRpb24uQ29uZmlndXJhdGlvbjsNCiBpbXBvcnQgb3JnLmFyZ291bWwua2VybmVs LlByb2ZpbGVDb25maWd1cmF0aW9uOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5rZXJuZWwuUHJvamVj dDsNCkBAIC03MCwyMSArNzEsMjEgQEANCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RG aWxlUGVyc2lzdGVyIGV4dGVuZHMgRmlsZUZpbHRlcg0KICAgICAgICAgaW1wbGVtZW50cyBQcm9q ZWN0RmlsZVBlcnNpc3RlciB7DQogDQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBM T0cgPSANCi0gICAgICAgIExvZ2dlci5nZXRMb2dnZXIoQWJzdHJhY3RGaWxlUGVyc2lzdGVyLmNs YXNzKTsNCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9DQorICAgICAgICBM b2dnZXIuZ2V0TG9nZ2VyKEFic3RyYWN0RmlsZVBlcnNpc3Rlci5jbGFzcy5nZXROYW1lKCkpOw0K IA0KICAgICAvKioNCi0gICAgICogTWFwIG9mIHBlcnNpc3RlcnMgYnkgdGFyZ2V0IGNsYXNzDQor ICAgICAqIE1hcCBvZiBwZXJzaXN0ZXJzIGJ5IHRhcmdldCBjbGFzcy4NCiAgICAgICovDQotICAg IHByaXZhdGUgc3RhdGljIE1hcDxDbGFzcywgQ2xhc3M8PyBleHRlbmRzIE1lbWJlckZpbGVQZXJz aXN0ZXI+PiANCi0gICAgcGVyc2lzdGVyc0J5Q2xhc3MgPSANCisgICAgcHJpdmF0ZSBzdGF0aWMg TWFwPENsYXNzLCBDbGFzczw/IGV4dGVuZHMgTWVtYmVyRmlsZVBlcnNpc3Rlcj4+DQorICAgIHBl cnNpc3RlcnNCeUNsYXNzID0NCiAgICAgICAgIG5ldyBIYXNoTWFwPENsYXNzLCBDbGFzczw/IGV4 dGVuZHMgTWVtYmVyRmlsZVBlcnNpc3Rlcj4+KCk7DQogDQogICAgIC8qKg0KLSAgICAgKiBNYXAg b2YgcGVyc2lzdGVycyBieSB0YWcgLyBmaWxlIGV4dGVuc2lvbg0KKyAgICAgKiBNYXAgb2YgcGVy c2lzdGVycyBieSB0YWcgLyBmaWxlIGV4dGVuc2lvbi4NCiAgICAgICovDQotICAgIHByaXZhdGUg c3RhdGljIE1hcDxTdHJpbmcsIENsYXNzPD8gZXh0ZW5kcyBNZW1iZXJGaWxlUGVyc2lzdGVyPj4g DQotICAgIHBlcnNpc3RlcnNCeVRhZyA9IA0KKyAgICBwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5n LCBDbGFzczw/IGV4dGVuZHMgTWVtYmVyRmlsZVBlcnNpc3Rlcj4+DQorICAgIHBlcnNpc3RlcnNC eVRhZyA9DQogICAgICAgICBuZXcgSGFzaE1hcDxTdHJpbmcsIENsYXNzPD8gZXh0ZW5kcyBNZW1i ZXJGaWxlUGVyc2lzdGVyPj4oKTsNCiANCiAgICAgc3RhdGljIHsNCkBAIC05Nyw5ICs5OCw5IEBA DQogICAgICAgICByZWdpc3RlclBlcnNpc3RlcihQcm9qZWN0TWVtYmVyTW9kZWwuY2xhc3MsICJ4 bWkiLA0KICAgICAgICAgICAgICAgICBNb2RlbE1lbWJlckZpbGVQZXJzaXN0ZXIuY2xhc3MpOw0K ICAgICB9DQotICAgIA0KKw0KICAgICBwcml2YXRlIEV2ZW50TGlzdGVuZXJMaXN0IGxpc3RlbmVy TGlzdCA9IG5ldyBFdmVudExpc3RlbmVyTGlzdCgpOw0KLSAgICANCisNCiAgICAgLy8gVGhpcyBj YW4gYmUgbWFkZSBwdWJsaWMgdG8gYWxsb3cgb3RoZXJzIHRvIGV4dGVuZCB0aGVpciBvd24gcGVy c2lzdGVycw0KICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHJlZ2lzdGVyUGVyc2lzdGVyKENs YXNzIHRhcmdldCwgU3RyaW5nIHRhZywNCiAgICAgICAgICAgICBDbGFzczw/IGV4dGVuZHMgTWVt YmVyRmlsZVBlcnNpc3Rlcj4gcGVyc2lzdGVyKSB7DQpAQCAtMTMyLDI4ICsxMzMsMjggQEANCiAg ICAgfQ0KIA0KICAgICAvKioNCi0gICAgICogU2F2aW5nIGluIGEgc2FmZSB3YXkgbWVhbnM6IFJl dGFpbiB0aGUgcHJldmlvdXMgcHJvamVjdCANCisgICAgICogU2F2aW5nIGluIGEgc2FmZSB3YXkg bWVhbnM6IFJldGFpbiB0aGUgcHJldmlvdXMgcHJvamVjdA0KICAgICAgKiBmaWxlIGV2ZW4gd2hl biB0aGUgc2F2ZSBvcGVyYXRpb24gY2F1c2VzIGFuDQotICAgICAqIGV4Y2VwdGlvbiBpbiB0aGUg bWlkZGxlLiANCisgICAgICogZXhjZXB0aW9uIGluIHRoZSBtaWRkbGUuDQogICAgICAqIEFsc28g Y3JlYXRlIGEgYmFja3VwIGZpbGUgYWZ0ZXIgc2F2aW5nLg0KLSAgICAgKiANCi0gICAgICogU2Vl IGlzc3VlIDYwMTIgLSBvdXIgbWV0aG9kIG9mIHNhdmluZyBpbiBhIHNhZmUgd2F5IGRvZXMgbm90 IA0KLSAgICAgKiB3b3JrIG9uIGEgU2hhcmVQb2ludCBkcml2ZS4gDQorICAgICAqDQorICAgICAq IFNlZSBpc3N1ZSA2MDEyIC0gb3VyIG1ldGhvZCBvZiBzYXZpbmcgaW4gYSBzYWZlIHdheSBkb2Vz IG5vdA0KKyAgICAgKiB3b3JrIG9uIGEgU2hhcmVQb2ludCBkcml2ZS4NCiAgICAgICogSGVuY2Ug d2UgY2FuIGNvbmZpZ3VyZSBBcmdvVU1MIHRvIHNhdmUgdW5zYWZlLCB0b28uLi4NCi0gICAgICog DQorICAgICAqDQogICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB3ZSBzaG91bGQgYmUgY2FyZWZ1bA0K ICAgICAgKi8NCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gdXNlU2FmZVNhdmVzKCkgew0KICAgICAg ICAgYm9vbGVhbiByZXN1bHQgPSBDb25maWd1cmF0aW9uLmdldEJvb2xlYW4oDQogICAgICAgICAg ICAgICAgICAgICAgICAgUGVyc2lzdGVuY2VNYW5hZ2VyLlVTRV9TQUZFX1NBVkVTLCB0cnVlKTsN CiANCi0gICAgICAgIC8qIG1ha2Ugc3VyZSB0aGlzIHNldHRpbmcgZXhpc3RzIGluIHRoZSBjb25m aWd1cmF0aW9uIGZpbGUgDQorICAgICAgICAvKiBtYWtlIHN1cmUgdGhpcyBzZXR0aW5nIGV4aXN0 cyBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlDQogICAgICAgICAgKiB0byBmYWNpbGl0YXRlIGNo YW5naW5nOiAqLw0KICAgICAgICAgQ29uZmlndXJhdGlvbi5zZXRCb29sZWFuKFBlcnNpc3RlbmNl TWFuYWdlci5VU0VfU0FGRV9TQVZFUywgcmVzdWx0KTsNCi0gICAgICAgIA0KKw0KICAgICAgICAg cmV0dXJuIHJlc3VsdDsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIENvcGll cyBvbmUgZmlsZSBzcmMgdG8gYW5vdGhlciwgcmFpc2luZyBmaWxlIGV4Y2VwdGlvbnMNCiAgICAg ICogaWYgdGhlcmUgYXJlIHNvbWUgcHJvYmxlbXMuDQpAQCAtMjcxLDcgKzI3Miw3IEBADQogICAg ICAqIEBzZWUgb3JnLmFyZ291bWwucGVyc2lzdGVuY2UuUHJvamVjdEZpbGVQZXJzaXN0ZXIjc2F2 ZSgNCiAgICAgICogb3JnLmFyZ291bWwua2VybmVsLlByb2plY3QsIGphdmEuaW8uRmlsZSkNCiAg ICAgICovDQotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNhdmUoUHJvamVjdCBwcm9qZWN0LCBGaWxl IGZpbGUpIHRocm93cyBTYXZlRXhjZXB0aW9uLCANCisgICAgcHVibGljIGZpbmFsIHZvaWQgc2F2 ZShQcm9qZWN0IHByb2plY3QsIEZpbGUgZmlsZSkgdGhyb3dzIFNhdmVFeGNlcHRpb24sDQogICAg IEludGVycnVwdGVkRXhjZXB0aW9uIHsNCiAgICAgICAgIHByZVNhdmUocHJvamVjdCwgZmlsZSk7 DQogICAgICAgICBkb1NhdmUocHJvamVjdCwgZmlsZSk7DQpAQCAtMzc2LDEyICszNzcsMTIgQEAN CiAgICAgLyoqDQogICAgICAqIFJldHVybnMgdHJ1ZSBpZiBhIEZpbGVDaG9vc2VyIHNob3VsZCB2 aXN1YWxpemUgYW4gaWNvbiBmb3IgdGhlDQogICAgICAqIHBlcnNpc3Rlci4NCi0gICAgICogDQot ICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGVyc2lzdGVyIGlzIGFzc29jaWF0ZWQgdG8gYW4g aWNvbiANCisgICAgICoNCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBwZXJzaXN0ZXIgaXMg YXNzb2NpYXRlZCB0byBhbiBpY29uDQogICAgICAqLw0KICAgICBwdWJsaWMgYWJzdHJhY3QgYm9v bGVhbiBoYXNBbkljb24oKTsNCiANCi0gICAgDQorDQogICAgIC8qKg0KICAgICAgKiBHZXQgYSBN ZW1iZXJGaWxlUGVyc2lzdGVyIGJhc2VkIG9uIGEgZ2l2ZW4gUHJvamVjdE1lbWJlci4NCiAgICAg ICoNCkBAIC0zOTUsNyArMzk2LDcgQEANCiAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAg LyoNCiAgICAgICAgICAgICAgKiBUT0RPOiBOb3Qgc3VyZSB3ZSBuZWVkIHRvIGRvIHRoaXMsIGJ1 dCBqdXN0IHRvIGJlIHNhZmUgZm9yIG5vdy4NCi0gICAgICAgICAgICAgKi8gICAgICAgDQorICAg ICAgICAgICAgICovDQogICAgICAgICAgICAgZm9yIChDbGFzcyBjbGF6eiA6IHBlcnNpc3RlcnNC eUNsYXNzLmtleVNldCgpKSB7DQogICAgICAgICAgICAgICAgIGlmIChjbGF6ei5pc0Fzc2lnbmFi bGVGcm9tKHBtLmdldENsYXNzKCkpKSB7DQogICAgICAgICAgICAgICAgICAgICBwZXJzaXN0ZXIg PSBwZXJzaXN0ZXJzQnlDbGFzcy5nZXQoY2xhenopOw0KQEAgLTQxNyw3ICs0MTgsNyBAQA0KICAg ICAgKiBAcmV0dXJuIHRoZSBwZXJzaXN0ZXINCiAgICAgICovDQogICAgIHByb3RlY3RlZCBNZW1i ZXJGaWxlUGVyc2lzdGVyIGdldE1lbWJlckZpbGVQZXJzaXN0ZXIoU3RyaW5nIHRhZykgew0KLSAg ICAgICAgQ2xhc3M8PyBleHRlbmRzIE1lbWJlckZpbGVQZXJzaXN0ZXI+IHBlcnNpc3RlciA9IA0K KyAgICAgICAgQ2xhc3M8PyBleHRlbmRzIE1lbWJlckZpbGVQZXJzaXN0ZXI+IHBlcnNpc3RlciA9 DQogICAgICAgICAgICAgcGVyc2lzdGVyc0J5VGFnLmdldCh0YWcpOw0KICAgICAgICAgaWYgKHBl cnNpc3RlciAhPSBudWxsKSB7DQogICAgICAgICAgICAgcmV0dXJuIG5ld1BlcnNpc3RlcihwZXJz aXN0ZXIpOw0KQEAgLTQzMCwxNyArNDMxLDE3IEBADQogICAgICAgICB0cnkgew0KICAgICAgICAg ICAgIHJldHVybiBjbGF6ei5uZXdJbnN0YW5jZSgpOw0KICAgICAgICAgfSBjYXRjaCAoSW5zdGFu dGlhdGlvbkV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgTE9HLmVycm9yKCJFeGNlcHRpb24g aW5zdGFudGlhdGluZyBmaWxlIHBlcnNpc3RlciAiICsgY2xhenosIGUpOw0KKyAgICAgICAgICAg IExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiRXhjZXB0aW9uIGluc3RhbnRpYXRpbmcgZmlsZSBwZXJz aXN0ZXIgIiArIGNsYXp6LCBlKTsNCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsNCiAgICAgICAg IH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgew0KLSAgICAgICAgICAgIExPRy5l cnJvcigiRXhjZXB0aW9uIGluc3RhbnRpYXRpbmcgZmlsZSBwZXJzaXN0ZXIgIiArIGNsYXp6LCBl KTsNCisgICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwgIkV4Y2VwdGlvbiBpbnN0YW50 aWF0aW5nIGZpbGUgcGVyc2lzdGVyICIgKyBjbGF6eiwgZSk7DQogICAgICAgICAgICAgcmV0dXJu IG51bGw7DQogICAgICAgICB9DQogICAgIH0NCi0gICAgDQotICAgIC8vIFRPRE86IERvY3VtZW50 IA0KKw0KKyAgICAvLyBUT0RPOiBEb2N1bWVudA0KICAgICBjbGFzcyBQcm9ncmVzc01nciBpbXBs ZW1lbnRzIFByb2dyZXNzTGlzdGVuZXIgew0KLSAgICAgICAgDQorDQogICAgICAgICAvKioNCiAg ICAgICAgICAqIFRoZSBwZXJjZW50YWdlIGNvbXBsZXRlbmVzcyBvZiBwaGFzZXMgY29tcGxldGUu DQogICAgICAgICAgKiBEb2VzIG5vdCBpbmNsdWRlIHBhcnQtY29tcGxldGVkIHBoYXNlcy4NCkBA IC00NTksNyArNDYwLDcgQEANCiAgICAgICAgICAqIHZlcnNpb24gYW5kIG9uZSBwYWhzZSBmb3Ig dGhlIGZpbmFsIGxvYWQuDQogICAgICAgICAgKi8NCiAgICAgICAgIHByaXZhdGUgaW50IG51bWJl ck9mUGhhc2VzOw0KLSAgICAgICAgDQorDQogICAgICAgICBwdWJsaWMgdm9pZCBzZXRQZXJjZW50 UGhhc2VzQ29tcGxldGUoaW50IGFQZXJjZW50UGhhc2VzQ29tcGxldGUpIHsNCiAgICAgICAgICAg ICB0aGlzLnBlcmNlbnRQaGFzZXNDb21wbGV0ZSA9IGFQZXJjZW50UGhhc2VzQ29tcGxldGU7DQog ICAgICAgICB9DQpAQCAtNDc1LDcgKzQ3Niw3IEBADQogICAgICAgICBwdWJsaWMgaW50IGdldE51 bWJlck9mUGhhc2VzKCkgew0KICAgICAgICAgICAgIHJldHVybiB0aGlzLm51bWJlck9mUGhhc2Vz Ow0KICAgICAgICAgfQ0KLSAgICAgICAgDQorDQogICAgICAgICBwcm90ZWN0ZWQgdm9pZCBuZXh0 UGhhc2UoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gew0KICAgICAgICAgICAgIFRocmVh ZFV0aWxzLmNoZWNrSWZJbnRlcnJ1cHRlZCgpOw0KICAgICAgICAgICAgICsrcGhhc2VzQ29tcGxl dGVkOw0KQEAgLTQ4MywxMCArNDg0LDEwIEBADQogICAgICAgICAgICAgICAgIChwaGFzZXNDb21w bGV0ZWQgKiAxMDApIC8gbnVtYmVyT2ZQaGFzZXM7DQogICAgICAgICAgICAgZmlyZVByb2dyZXNz RXZlbnQocGVyY2VudFBoYXNlc0NvbXBsZXRlKTsNCiAgICAgICAgIH0NCi0gICAgICAgIA0KKw0K ICAgICAgICAgLyoqDQogICAgICAgICAgKiBDYWxsZWQgd2hlbiBhIFByb2dyZXNzRXZlbnQgaXMg ZmlyZWQuDQotICAgICAgICAgKiAgDQorICAgICAgICAgKg0KICAgICAgICAgICogQHNlZSBvcmcu YXJnb3VtbC50YXNrbWdtdC5Qcm9ncmVzc0xpc3RlbmVyI3Byb2dyZXNzKG9yZy5hcmdvdW1sLnRh c2ttZ210LlByb2dyZXNzRXZlbnQpDQogICAgICAgICAgKiBAdGhyb3dzIEludGVycnVwdGVkRXhj ZXB0aW9uICAgICBpZiB0aHJlYWQgaXMgaW50ZXJydXB0ZWQNCiAgICAgICAgICAqLw0KQEAgLTQ5 OCwxMyArNDk5LDEzIEBADQogICAgICAgICAgICAgbG9uZyBwcm9wb3J0aW9uID0gKHBvc2l0aW9u ICogcGVyY2VudFBoYXNlc0xlZnQpIC8gbGVuZ3RoOw0KICAgICAgICAgICAgIGZpcmVQcm9ncmVz c0V2ZW50KHBlcmNlbnRQaGFzZXNDb21wbGV0ZSArIHByb3BvcnRpb24pOw0KICAgICAgICAgfQ0K LSAgICAgICAgDQorDQogICAgICAgICAvKioNCiAgICAgICAgICAqIEluZm9ybSBsaXN0ZW5lcnMg b2YgYW55IHByb2dyZXNzIG5vdGlmaWNhdGlvbnMuDQogICAgICAgICAgKiBAcGFyYW0gcGVyY2Vu dCB0aGUgY3VycmVudCBwZXJjZW50YWdlIHByb2dyZXNzLg0KICAgICAgICAgICogQHRocm93cyBJ bnRlcnJ1cHRlZEV4Y2VwdGlvbiAgICAgaWYgdGhyZWFkIGlzIGludGVycnVwdGVkDQogICAgICAg ICAgKi8NCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGZpcmVQcm9ncmVzc0V2ZW50KGxvbmcgcGVy Y2VudCkgDQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvZ3Jlc3NFdmVudChsb25nIHBl cmNlbnQpDQogICAgICAgICAgICAgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsNCiAgICAg ICAgICAgICBQcm9ncmVzc0V2ZW50IGV2ZW50ID0gbnVsbDsNCiAgICAgICAgICAgICAvLyBHdWFy YW50ZWVkIHRvIHJldHVybiBhIG5vbi1udWxsIGFycmF5DQpAQCAtNTIwLDYgKzUyMSw2IEBADQog ICAgICAgICAgICAgICAgICAgICAoKFByb2dyZXNzTGlzdGVuZXIpIGxpc3RlbmVyc1tpICsgMV0p LnByb2dyZXNzKGV2ZW50KTsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCi0g ICAgICAgIH0gICAgICAgIA0KKyAgICAgICAgfQ0KICAgICB9DQogfQ0KDQpNb2RpZmllZDogdHJ1 bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9BcmdvUGFyc2Vy LmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291 bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9Bcmdv UGFyc2VyLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2Fy Z291bWwvcGVyc2lzdGVuY2UvQXJnb1BhcnNlci5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9z cmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3BlcnNpc3RlbmNlL0FyZ29QYXJzZXIuamF2 YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0b3Jz IC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0g c2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUg YWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29t cGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNDEsOCAr NDEsOSBAQA0KIGltcG9ydCBqYXZhLmlvLlJlYWRlcjsNCiBpbXBvcnQgamF2YS51dGlsLkFycmF5 TGlzdDsNCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5n LkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQotaW1wb3J0IG9y Zy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5rZXJuZWwuUHJvamVj dDsNCiBpbXBvcnQgb3JnLmFyZ291bWwua2VybmVsLlByb2plY3RTZXR0aW5nczsNCiBpbXBvcnQg b3JnLmFyZ291bWwubm90YXRpb24uTm90YXRpb25TZXR0aW5nczsNCkBAIC01MiwyMSArNTMsMjIg QEANCiANCiANCiAvKioNCi0gKiBQYXJzZXIgZm9yIEFyZ29VTUwgcHJvamVjdCBkZXNjcmlwdGlv biBmaWxlICguYXJnbykNCisgKiBQYXJzZXIgZm9yIEFyZ29VTUwgcHJvamVjdCBkZXNjcmlwdGlv biBmaWxlICguYXJnbykuDQogICovDQogY2xhc3MgQXJnb1BhcnNlciBleHRlbmRzIFNBWFBhcnNl ckJhc2Ugew0KIA0KICAgICAvKioNCiAgICAgICogTG9nZ2VyLg0KICAgICAgKi8NCi0gICAgcHJp dmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoQXJnb1BhcnNl ci5jbGFzcyk7DQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KKyAgICAg ICAgTG9nZ2VyLmdldExvZ2dlcihBcmdvUGFyc2VyLmNsYXNzLmdldE5hbWUoKSk7DQogDQogICAg IHByaXZhdGUgUHJvamVjdCBwcm9qZWN0Ow0KIA0KICAgICBwcml2YXRlIFByb2plY3RTZXR0aW5n cyBwczsNCi0gICAgDQorDQogICAgIHByaXZhdGUgRGlhZ3JhbVNldHRpbmdzIGRpYWdyYW1EZWZh dWx0czsNCi0gICAgDQorDQogICAgIHByaXZhdGUgTm90YXRpb25TZXR0aW5ncyBub3RhdGlvblNl dHRpbmdzOw0KIA0KICAgICBwcml2YXRlIEFyZ29Ub2tlblRhYmxlIHRva2VucyA9IG5ldyBBcmdv VG9rZW5UYWJsZSgpOw0KQEAgLTEyOCw4ICsxMzAsMTEgQEANCiAgICAgfQ0KIA0KICAgICBwcml2 YXRlIHZvaWQgcHJlUmVhZChQcm9qZWN0IHRoZVByb2plY3QpIHsNCi0gICAgICAgIExPRy5pbmZv KCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsNCi0gICAgICAgIExP Ry5pbmZvKCI9PSBSRUFESU5HIFBST0pFQ1QgIiArIHRoZVByb2plY3QpOw0KKyAgICAgICAgTE9H LmxvZyhMZXZlbC5JTkZPLA0KKyAgICAgICAgICAgICAgICAiPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09XG4iDQorICAgICAgICAgICAgICAgICsgIj09IFJFQURJTkcgUFJP SkVDVCB7MH0iLA0KKyAgICAgICAgICAgICAgICB0aGVQcm9qZWN0KTsNCisNCiAgICAgICAgIHBy b2plY3QgPSB0aGVQcm9qZWN0Ow0KICAgICAgICAgcHMgPSBwcm9qZWN0LmdldFByb2plY3RTZXR0 aW5ncygpOw0KICAgICAgICAgZGlhZ3JhbURlZmF1bHRzID0gcHMuZ2V0RGVmYXVsdERpYWdyYW1T ZXR0aW5ncygpOw0KQEAgLTEzNyw4ICsxNDIsOCBAQA0KICAgICB9DQogDQogICAgIHByaXZhdGUg dm9pZCBsb2dFcnJvcihTdHJpbmcgcHJvamVjdE5hbWUsIFNBWEV4Y2VwdGlvbiBlKSB7DQotICAg ICAgICBMT0cuZXJyb3IoIkV4Y2VwdGlvbiByZWFkaW5nIHByb2plY3Q9PT09PT09PT09PT09PT09 IiwgZSk7DQotICAgICAgICBMT0cuZXJyb3IocHJvamVjdE5hbWUpOw0KKyAgICAgICAgTE9HLmxv ZyhMZXZlbC5TRVZFUkUsDQorICAgICAgICAgICAgICAgICJFeGNlcHRpb24gcmVhZGluZyBwcm9q ZWN0ID09PT09PT09PT09PT09PT0iK3Byb2plY3ROYW1lLCBlKTsNCiAgICAgfQ0KIA0KICAgICAv KioNCkBAIC0xNjQsNyArMTY5LDggQEANCiAgICAgICovDQogICAgIHB1YmxpYyB2b2lkIGhhbmRs ZVN0YXJ0RWxlbWVudChYTUxFbGVtZW50IGUpIHRocm93cyBTQVhFeGNlcHRpb24gew0KICAgICAg ICAgaWYgKERCRykgew0KLSAgICAgICAgICAgIExPRy5kZWJ1ZygiTk9URTogQXJnb1BhcnNlciBo YW5kbGVTdGFydFRhZzoiICsgZS5nZXROYW1lKCkpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2 ZWwuRklORSwNCisgICAgICAgICAgICAgICAgICAgICJOT1RFOiBBcmdvUGFyc2VyIGhhbmRsZVN0 YXJ0VGFnOiB7MH0iLCBlLmdldE5hbWUoKSk7DQogICAgICAgICB9DQogICAgICAgICBzd2l0Y2gg KHRva2Vucy50b1Rva2VuKGUuZ2V0TmFtZSgpLCB0cnVlKSkgew0KICAgICAgICAgY2FzZSBBcmdv VG9rZW5UYWJsZS5UT0tFTl9BUkdPOg0KQEAgLTE3OCw3ICsxODQsNyBAQA0KICAgICAgICAgICAg IGJyZWFrOw0KICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICBpZiAoREJHKSB7DQotICAg ICAgICAgICAgICAgIExPRy53YXJuKCJXQVJOSU5HOiB1bmtub3duIHRhZzoiICsgZS5nZXROYW1l KCkpOw0KKyAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLldBUk5JTkcsICJXQVJOSU5HOiB1 bmtub3duIHRhZzoiICsgZS5nZXROYW1lKCkpOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAg ICBicmVhazsNCiAgICAgICAgIH0NCkBAIC0xOTEsNyArMTk3LDggQEANCiAgICAgQFN1cHByZXNz V2FybmluZ3MoImRlcHJlY2F0aW9uIikNCiAgICAgcHVibGljIHZvaWQgaGFuZGxlRW5kRWxlbWVu dChYTUxFbGVtZW50IGUpIHRocm93cyBTQVhFeGNlcHRpb24gew0KICAgICAgICAgaWYgKERCRykg ew0KLSAgICAgICAgICAgIExPRy5kZWJ1ZygiTk9URTogQXJnb1BhcnNlciBoYW5kbGVFbmRUYWc6 IiArIGUuZ2V0TmFtZSgpICsgIi4iKTsNCisgICAgICAgICAgICBMT0cubG9nKExldmVsLkZJTkUs DQorICAgICAgICAgICAgICAgICAgICAiTk9URTogQXJnb1BhcnNlciBoYW5kbGVFbmRUYWc6IHsw fSIsIGUuZ2V0TmFtZSgpKTsNCiAgICAgICAgIH0NCiAgICAgICAgIHN3aXRjaCAodG9rZW5zLnRv VG9rZW4oZS5nZXROYW1lKCksIGZhbHNlKSkgew0KICAgICAgICAgY2FzZSBBcmdvVG9rZW5UYWJs ZS5UT0tFTl9NRU1CRVI6DQpAQCAtMjY4LDcgKzI3NSw4IEBADQogICAgICAgICAgICAgYnJlYWs7 DQogICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgIGlmIChEQkcpIHsNCi0gICAgICAgICAg ICAgICAgTE9HLndhcm4oIldBUk5JTkc6IHVua25vd24gZW5kIHRhZzoiICsgZS5nZXROYW1lKCkp Ow0KKyAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLldBUk5JTkcsDQorICAgICAgICAgICAg ICAgICAgICAgICAgIldBUk5JTkc6IHVua25vd24gZW5kIHRhZzoiICsgZS5nZXROYW1lKCkpOw0K ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgIH0NCkBAIC00ODEs NyArNDg5LDggQEANCiAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgZGlhZ3JhbURlZmF1bHRz LnNldEZvbnRTaXplKEludGVnZXIucGFyc2VJbnQoZHN3KSk7DQogICAgICAgICB9IGNhdGNoIChO dW1iZXJGb3JtYXRFeGNlcHRpb24gZTEpIHsNCi0gICAgICAgICAgICBMT0cuZXJyb3IoIk51bWJl ckZvcm1hdEV4Y2VwdGlvbiB3aGlsZSBwYXJzaW5nIEZvbnQgU2l6ZSIsIGUxKTsNCisgICAgICAg ICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwNCisgICAgICAgICAgICAgICAgICAgICJOdW1iZXJG b3JtYXRFeGNlcHRpb24gd2hpbGUgcGFyc2luZyBGb250IFNpemUiLCBlMSk7DQogICAgICAgICB9 DQogICAgIH0NCiANCkBAIC01MDQsMTAgKzUxMywxMCBAQA0KICAgICAgICAgZGlhZ3JhbURlZmF1 bHRzLnNldFNob3dCaWRpcmVjdGlvbmFsQXJyb3dzKCENCiAgICAgICAgICAgICAgICAgQm9vbGVh bi5wYXJzZUJvb2xlYW4oaGlkZUJpZGlyZWN0aW9uYWxBcnJvd3MpKTsNCiAgICAgfQ0KLSAgICAN Ci0gICAgDQorDQorDQogICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2ZURpYWdyYW0oWE1M RWxlbWVudCBlKSB7DQotICAgICAgICAvKiBBdCB0aGlzIHN0YWdlIGR1cmluZyBsb2FkaW5nLCB0 aGUgZGlhZ3JhbXMgYXJlIA0KKyAgICAgICAgLyogQXQgdGhpcyBzdGFnZSBkdXJpbmcgbG9hZGlu ZywgdGhlIGRpYWdyYW1zIGFyZQ0KICAgICAgICAgICogbm90IGNyZWF0ZWQgeWV0IC0gc28gd2Ug aGF2ZSB0byBzdG9yZSB0aGlzIG5hbWUgZm9yIGxhdGVyIHVzZS4gKi8NCiAgICAgICAgIHByb2pl Y3Quc2V0U2F2ZWREaWFncmFtTmFtZShlLmdldFRleHQoKS50cmltKCkpOw0KICAgICB9DQoNCk1v ZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3BlcnNpc3RlbmNl L0RpYWdyYW1NZW1iZXJGaWxlUGVyc2lzdGVyLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGln cmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9v cmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9EaWFncmFtTWVtYmVyRmlsZVBlcnNpc3Rlci5qYXZhP3Zp ZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3BlcnNpc3Rl bmNlL0RpYWdyYW1NZW1iZXJGaWxlUGVyc2lzdGVyLmphdmEJKG9yaWdpbmFsKQ0KKysrIHRydW5r L3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcGVyc2lzdGVuY2UvRGlhZ3JhbU1lbWJl ckZpbGVQZXJzaXN0ZXIuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEs NiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMp IDIwMDkgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIw MTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhp cyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2 YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEu MA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxh YmxlIGF0DQpAQCAtNDYsOCArNDYsOSBAQA0KIGltcG9ydCBqYXZhLm5ldC5VUkw7DQogaW1wb3J0 IGphdmEudXRpbC5IYXNoTWFwOw0KIGltcG9ydCBqYXZhLnV0aWwuTWFwOw0KK2ltcG9ydCBqYXZh LnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0K IA0KLWltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwu YXBwbGljYXRpb24uYXBpLkFyZ287DQogaW1wb3J0IG9yZy5hcmdvdW1sLmtlcm5lbC5Qcm9qZWN0 Ow0KIGltcG9ydCBvcmcuYXJnb3VtbC5rZXJuZWwuUHJvamVjdE1lbWJlcjsNCkBAIC02NCwxOCAr NjUsMTggQEANCiAgKiBAYXV0aG9yIEJvYiBUYXJsaW5nDQogICovDQogY2xhc3MgRGlhZ3JhbU1l bWJlckZpbGVQZXJzaXN0ZXIgZXh0ZW5kcyBNZW1iZXJGaWxlUGVyc2lzdGVyIHsNCi0gICAgDQor DQogICAgIC8qKg0KICAgICAgKiBMb2dnZXIuDQogICAgICAqLw0KICAgICBwcml2YXRlIHN0YXRp YyBmaW5hbCBMb2dnZXIgTE9HID0NCi0gICAgICAgIExvZ2dlci5nZXRMb2dnZXIoRGlhZ3JhbU1l bWJlckZpbGVQZXJzaXN0ZXIuY2xhc3MpOw0KLSAgICANCisgICAgICAgIExvZ2dlci5nZXRMb2dn ZXIoRGlhZ3JhbU1lbWJlckZpbGVQZXJzaXN0ZXIuY2xhc3MuZ2V0TmFtZSgpKTsNCisNCiAgICAg LyoqDQogICAgICAqIFRoZSB0ZWUgZmlsZSBmb3IgcGVyc2lzdGVuY2UuDQogICAgICAqLw0KICAg ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEdNTF9URUUgPSAiL29yZy9hcmdvdW1sL3Bl cnNpc3RlbmNlL1BHTUwudGVlIjsNCi0gICAgDQorDQogICAgIHByaXZhdGUgc3RhdGljIGZpbmFs IE1hcDxTdHJpbmcsIFN0cmluZz4gQ0xBU1NfVFJBTlNMQVRJT05TID0NCiAgICAgICAgIG5ldyBI YXNoTWFwPFN0cmluZywgU3RyaW5nPigpOw0KIA0KQEAgLTg5LDcgKzkwLDcgQEANCiAgICAgICAg ICAgICB0aHJvdyBuZXcgT3BlbkV4Y2VwdGlvbigiSS9PIGVycm9yIG9uIHN0cmVhbSBjbG9zZSIs IGUpOw0KICAgICAgICAgfQ0KICAgICB9DQotICAgIA0KKw0KICAgICBAT3ZlcnJpZGUNCiAgICAg cHVibGljIHZvaWQgbG9hZChQcm9qZWN0IHByb2plY3QsIElucHV0U291cmNlIGlucHV0U291cmNl KQ0KICAgICAgICAgdGhyb3dzIE9wZW5FeGNlcHRpb24gew0KQEAgLTEwMSwxMiArMTAyLDEyIEBA DQogICAgICAgICAgICAgLy8ga2V5ZWQgYnkgdGhlaXIgVVVJRC4gVGhpcyBpcyB1c2VkIHRvIGFs bG9jYXRlDQogICAgICAgICAgICAgLy8gZmlncyB0byB0aGVpciBvd25lciB1c2luZyB0aGUgImhy ZWYiIGF0dHJpYnV0ZQ0KICAgICAgICAgICAgIC8vIGluIFBHTUwuDQotICAgICAgICAgICAgRGlh Z3JhbVNldHRpbmdzIGRlZmF1bHRTZXR0aW5ncyA9IA0KKyAgICAgICAgICAgIERpYWdyYW1TZXR0 aW5ncyBkZWZhdWx0U2V0dGluZ3MgPQ0KICAgICAgICAgICAgICAgICBwcm9qZWN0LmdldFByb2pl Y3RTZXR0aW5ncygpLmdldERlZmF1bHREaWFncmFtU2V0dGluZ3MoKTsNCiAgICAgICAgICAgICAv LyBUT0RPOiBXZSBuZWVkIHRoZSBwcm9qZWN0IHNwZWNpZmljIGRpYWdyYW0gc2V0dGluZ3MgaGVy ZQ0KICAgICAgICAgICAgIFBHTUxTdGFja1BhcnNlciBwYXJzZXIgPSBuZXcgUEdNTFN0YWNrUGFy c2VyKHByb2plY3QuZ2V0VVVJRFJlZnMoKSwNCiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRT ZXR0aW5ncyk7DQotICAgICAgICAgICAgTE9HLmluZm8oIkFkZGluZyB0cmFuc2xhdGlvbnMgcmVn aXN0ZXJlZCBieSBtb2R1bGVzIik7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLCAi QWRkaW5nIHRyYW5zbGF0aW9ucyByZWdpc3RlcmVkIGJ5IG1vZHVsZXMiKTsNCiAgICAgICAgICAg ICBmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIFN0cmluZz4gdHJhbnNsYXRpb24NCiAgICAgICAgICAg ICAgICAgICAgIDogQ0xBU1NfVFJBTlNMQVRJT05TLmVudHJ5U2V0KCkpIHsNCiAgICAgICAgICAg ICAgICAgcGFyc2VyLmFkZFRyYW5zbGF0aW9uKA0KQEAgLTEyMiw5ICsxMjMsOSBAQA0KICAgICAg ICAgICAgIHRocm93IG5ldyBPcGVuRXhjZXB0aW9uKGUpOw0KICAgICAgICAgfQ0KICAgICB9DQot ICAgIA0KKw0KICAgICBAT3ZlcnJpZGUNCi0gICAgcHVibGljIHZvaWQgbG9hZChQcm9qZWN0IHBy b2plY3QsIFVSTCB1cmwpIHRocm93cyBPcGVuRXhjZXB0aW9uIHsgICANCisgICAgcHVibGljIHZv aWQgbG9hZChQcm9qZWN0IHByb2plY3QsIFVSTCB1cmwpIHRocm93cyBPcGVuRXhjZXB0aW9uIHsN CiAgICAgICAgIGxvYWQocHJvamVjdCwgbmV3IElucHV0U291cmNlKHVybC50b0V4dGVybmFsRm9y bSgpKSk7DQogICAgIH0NCiANCkBAIC0xNDksMTIgKzE1MCwxMiBAQA0KICAgICAgICAgfQ0KICAg ICAgICAgT3V0cHV0U3RyZWFtV3JpdGVyIG91dHB1dFdyaXRlcjsNCiAgICAgICAgIHRyeSB7DQot ICAgICAgICAgICAgb3V0cHV0V3JpdGVyID0gDQorICAgICAgICAgICAgb3V0cHV0V3JpdGVyID0N CiAgICAgICAgICAgICAgICAgbmV3IE91dHB1dFN0cmVhbVdyaXRlcihvdXRTdHJlYW0sIEFyZ28u Z2V0RW5jb2RpbmcoKSk7DQogICAgICAgICB9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhj ZXB0aW9uIGUxKSB7DQogICAgICAgICAgICAgdGhyb3cgbmV3IFNhdmVFeGNlcHRpb24oIkJhZCBl bmNvZGluZyIsIGUxKTsNCiAgICAgICAgIH0NCi0gICAgICAgIA0KKw0KICAgICAgICAgdHJ5IHsN CiAgICAgICAgICAgICAvLyBXQVJOSU5HOiB0aGUgT3V0cHV0U3RyZWFtIHZlcnNpb24gb2YgdGhp cyBkb2Vzbid0IHdvcmshIC0gdGZtDQogICAgICAgICAgICAgZXhwYW5kZXIuZXhwYW5kKG91dHB1 dFdyaXRlciwgZGlhZ3JhbU1lbWJlci5nZXREaWFncmFtKCkpOw0KQEAgLTE2Nyw3ICsxNjgsNyBA QA0KICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2F2ZUV4Y2VwdGlvbihlKTsNCiAgICAgICAg ICAgICB9DQogICAgICAgICB9DQotICAgICAgICANCisNCiAgICAgfQ0KIA0KICAgICAvKioNCg0K TW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcGVyc2lzdGVu Y2UvTW9kZWxNZW1iZXJGaWxlUGVyc2lzdGVyLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGln cmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9v cmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9Nb2RlbE1lbWJlckZpbGVQZXJzaXN0ZXIuamF2YT92aWV3 PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0ZW5j ZS9Nb2RlbE1lbWJlckZpbGVQZXJzaXN0ZXIuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3Jj L2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9Nb2RlbE1lbWJlckZpbGVQ ZXJzaXN0ZXIuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0K IC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkt MjAxMSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAx MiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlz IHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZh aWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4w DQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFi bGUgYXQNCkBAIC00OCw4ICs0OCw5IEBADQogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KIGlt cG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7DQogaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9y dCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9n Z2VyOw0KIA0KLWltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsNCiBpbXBvcnQgb3JnLmFy Z291bWwuYXBwbGljYXRpb24uYXBpLkFyZ287DQogaW1wb3J0IG9yZy5hcmdvdW1sLmFwcGxpY2F0 aW9uLmhlbHBlcnMuQXBwbGljYXRpb25WZXJzaW9uOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5jb25m aWd1cmF0aW9uLkNvbmZpZ3VyYXRpb247DQpAQCAtNzEsMTcgKzcyLDE3IEBADQogICogVGhlIGZp bGUgcGVyc2lzdGVyIGZvciB0aGUgVU1MIG1vZGVsLg0KICAqIEBhdXRob3IgQm9iIFRhcmxpbmcN CiAgKi8NCi1jbGFzcyBNb2RlbE1lbWJlckZpbGVQZXJzaXN0ZXIgZXh0ZW5kcyBNZW1iZXJGaWxl UGVyc2lzdGVyIA0KK2NsYXNzIE1vZGVsTWVtYmVyRmlsZVBlcnNpc3RlciBleHRlbmRzIE1lbWJl ckZpbGVQZXJzaXN0ZXINCiAgICAgaW1wbGVtZW50cyBYbWlFeHRlbnNpb25QYXJzZXIgew0KIA0K ICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCi0gICAgICAgIExvZ2dlci5n ZXRMb2dnZXIoTW9kZWxNZW1iZXJGaWxlUGVyc2lzdGVyLmNsYXNzKTsNCisgICAgICAgIExvZ2dl ci5nZXRMb2dnZXIoTW9kZWxNZW1iZXJGaWxlUGVyc2lzdGVyLmNsYXNzLmdldE5hbWUoKSk7DQog DQogICAgIHByaXZhdGUgT2JqZWN0IGN1ck1vZGVsOw0KICAgICBwcml2YXRlIEhhc2hNYXA8U3Ry aW5nLCBPYmplY3Q+IHVVSURSZWZzOw0KIA0KICAgICBwcml2YXRlIENvbGxlY3Rpb24gZWxlbWVu dHNSZWFkOw0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIExvYWRzIGEgbW9kZWwgKFhNSSBv bmx5KSBmcm9tIGEgVVJMLiBCRSBBRFZJU0VEIHRoaXMNCiAgICAgICogbWV0aG9kIGhhcyBhIHNp ZGUgZWZmZWN0LiBJdCBzZXRzIF9VVUlEUkVGUyB0byB0aGUgbW9kZWwuPHA+DQpAQCAtOTIsMTAg KzkzLDEwIEBADQogICAgICAqLw0KICAgICBwdWJsaWMgdm9pZCBsb2FkKFByb2plY3QgcHJvamVj dCwgVVJMIHVybCkNCiAgICAgICAgIHRocm93cyBPcGVuRXhjZXB0aW9uIHsNCi0gICAgICAgIA0K Kw0KICAgICAgICAgbG9hZChwcm9qZWN0LCBuZXcgSW5wdXRTb3VyY2UodXJsLnRvRXh0ZXJuYWxG b3JtKCkpKTsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIExvYWRzIGEgbW9k ZWwgKFhNSSBvbmx5KSBmcm9tIGFuIGlucHV0IHN0cmVhbS4gQkUgQURWSVNFRCB0aGlzDQogICAg ICAqIG1ldGhvZCBoYXMgYSBzaWRlIGVmZmVjdC4gSXQgc2V0cyBfVVVJRFJFRlMgdG8gdGhlIG1v ZGVsLjxwPg0KQEAgLTEwOSw3ICsxMTAsNyBAQA0KICAgICAgKi8NCiAgICAgcHVibGljIHZvaWQg bG9hZChQcm9qZWN0IHByb2plY3QsIElucHV0U3RyZWFtIGlucHV0U3RyZWFtKQ0KICAgICAgICAg dGhyb3dzIE9wZW5FeGNlcHRpb24gew0KLSAgICAgICAgDQorDQogICAgICAgICBsb2FkKHByb2pl Y3QsIG5ldyBJbnB1dFNvdXJjZShpbnB1dFN0cmVhbSkpOw0KICAgICB9DQogDQpAQCAtMTI5LDcg KzEzMCw3IEBADQogICAgICAgICAgICAgcmVhZE1vZGVscyhzb3VyY2UpOw0KICAgICAgICAgICAg IG1tb2RlbCA9IGdldEN1ck1vZGVsKCk7DQogICAgICAgICB9IGNhdGNoIChPcGVuRXhjZXB0aW9u IGUpIHsNCi0gICAgICAgICAgICBMT0cuZXJyb3IoIlVtbEV4Y2VwdGlvbiBjYXVnaHQiLCBlKTsN CisgICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwgIlVtbEV4Y2VwdGlvbiBjYXVnaHQi LCBlKTsNCiAgICAgICAgICAgICB0aHJvdyBlOw0KICAgICAgICAgfQ0KICAgICAgICAgLy8gVGhp cyBzaG91bGQgcHJvYmFibHkgYmUgaW5zaWRlIHhtaVJlYWRlci5wYXJzZQ0KQEAgLTE2MCw3ICsx NjEsNyBAQA0KIA0KICAgICAvKioNCiAgICAgICogU2F2ZSB0aGUgcHJvamVjdCBtb2RlbCB0byBY TUkuDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAc2VlIG9yZy5hcmdvdW1sLnBlcnNpc3Rl bmNlLk1lbWJlckZpbGVQZXJzaXN0ZXIjc2F2ZShQcm9qZWN0TWVtYmVyLCBPdXRwdXRTdHJlYW0p DQogICAgICAqLw0KICAgICBwdWJsaWMgdm9pZCBzYXZlKFByb2plY3RNZW1iZXIgbWVtYmVyLCBP dXRwdXRTdHJlYW0gb3V0U3RyZWFtKQ0KQEAgLTE3MCw5ICsxNzEsOSBAQA0KICAgICAgICAgT2Jq ZWN0IG1vZGVsID0gcG1tLmdldE1vZGVsKCk7DQogDQogICAgICAgICB0cnkgew0KLSAgICAgICAg ICAgIFhtaVdyaXRlciB4bWlXcml0ZXIgPSANCi0gICAgICAgICAgICAgICAgTW9kZWwuZ2V0WG1p V3JpdGVyKG1vZGVsLCBvdXRTdHJlYW0sIA0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFwcGxp Y2F0aW9uVmVyc2lvbi5nZXRWZXJzaW9uKCkgKyAiKCIgDQorICAgICAgICAgICAgWG1pV3JpdGVy IHhtaVdyaXRlciA9DQorICAgICAgICAgICAgICAgIE1vZGVsLmdldFhtaVdyaXRlcihtb2RlbCwg b3V0U3RyZWFtLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uVmVyc2lvbi5n ZXRWZXJzaW9uKCkgKyAiKCINCiAgICAgICAgICAgICAgICAgICAgICAgICArIFVtbEZpbGVQZXJz aXN0ZXIuUEVSU0lTVEVOQ0VfVkVSU0lPTiArICIpIik7DQogDQogICAgICAgICAgICAgeG1pV3Jp dGVyLndyaXRlKCk7DQpAQCAtMTg0LDkgKzE4NSw5IEBADQogICAgICAgICB9DQogDQogICAgIH0N Ci0gICAgDQorDQogICAgIHB1YmxpYyB2b2lkIHBhcnNlKFN0cmluZyBsYWJlbCwgU3RyaW5nIHht aUV4dGVuc2lvblN0cmluZykgew0KLSAgICAgICAgTE9HLmluZm8oIlBhcnNpbmcgYW4gZXh0ZW5z aW9uIGZvciAiICsgbGFiZWwpOw0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLCAiUGFyc2lu ZyBhbiBleHRlbnNpb24gZm9yIHswfSIsIGxhYmVsKTsNCiAgICAgfQ0KIA0KIA0KQEAgLTIwMSw3 ICsyMDIsNyBAQA0KIA0KICAgICAvKioNCiAgICAgICogUmV0dXJuIFhNSSBpZCB0byBvYmplY3Qg bWFwIGZvciB0aGUgbW9zdCByZWNlbnRseSByZWFkIFhNSSBmaWxlLg0KLSAgICAgKiANCisgICAg ICoNCiAgICAgICogQHJldHVybiB0aGUgVVVJRA0KICAgICAgKi8NCiAgICAgcHVibGljIEhhc2hN YXA8U3RyaW5nLCBPYmplY3Q+IGdldFVVSURSZWZzKCkgew0KQEAgLTIyMCwxNSArMjIxLDE3IEBA DQogICAgICAqLw0KICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVhZE1vZGVscyhVUkwg dXJsLA0KICAgICAgICAgICAgIFhtaUV4dGVuc2lvblBhcnNlciB4bWlFeHRlbnNpb25QYXJzZXIp IHRocm93cyBPcGVuRXhjZXB0aW9uIHsNCi0gICAgICAgIExPRy5pbmZvKCI9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsNCi0gICAgICAgIExPRy5pbmZvKCI9PSBSRUFE SU5HIE1PREVMICIgKyB1cmwpOw0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLA0KKyAgICAg ICAgICAgICAgICAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iDQor ICAgICAgICAgICAgICAgICsiPT0gUkVBRElORyBNT0RFTCB7MH0iLCB1cmwpOw0KKw0KICAgICAg ICAgdHJ5IHsNCiAgICAgICAgICAgICAvLyBUT0RPOiBXaGF0IHByb2dyZXNzTWdyIGlzIHRvIGJl IHVzZWQgaGVyZT8gV2hlcmUgZG9lcw0KICAgICAgICAgICAgIC8vICAgICAgIGl0IGNvbWUgZnJv bT8NCiAgICAgICAgICAgICBJbnB1dFNvdXJjZSBzb3VyY2UgPQ0KICAgICAgICAgICAgICAgICBu ZXcgSW5wdXRTb3VyY2UobmV3IFhtaUlucHV0U3RyZWFtKA0KICAgICAgICAgICAgICAgICAgICAg dXJsLm9wZW5TdHJlYW0oKSwgeG1pRXh0ZW5zaW9uUGFyc2VyLCAxMDAwMDAsIG51bGwpKTsNCi0g ICAgICAgICAgICANCisNCiAgICAgICAgICAgICBzb3VyY2Uuc2V0U3lzdGVtSWQodXJsLnRvU3Ry aW5nKCkpOw0KICAgICAgICAgICAgIHJlYWRNb2RlbHMoc291cmNlKTsNCiAgICAgICAgIH0gY2F0 Y2ggKElPRXhjZXB0aW9uIGV4KSB7DQpAQCAtMjM4LDcgKzI0MSw3IEBADQogDQogICAgIC8qKg0K ICAgICAgKiBSZWFkIGEgWE1JIGZpbGUgZnJvbSB0aGUgZ2l2ZW4gaW5wdXRzb3VyY2UuDQotICAg ICAqIA0KKyAgICAgKg0KICAgICAgKiBAcGFyYW0gc291cmNlIFRoZSBJbnB1dFNvdXJjZS4gVGhl IHN5c3RlbUlkIG9mIHRoZSBpbnB1dCBzb3VyY2Ugc2hvdWxkIGJlDQogICAgICAqICAgICAgICAg ICAgICAgIHNldCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIHRvIHJlc29sdmUgZXh0ZXJuYWwgcmVm ZXJlbmNlcy4NCiAgICAgICogQHRocm93cyBPcGVuRXhjZXB0aW9uIElmIGFuIGVycm9yIG9jY3Vy IHdoaWxlIHJlYWRpbmcgdGhlIHNvdXJjZQ0KQEAgLTI0OSw3ICsyNTIsNyBAQA0KICAgICAgICAg WG1pUmVhZGVyIHJlYWRlciA9IG51bGw7DQogICAgICAgICB0cnkgew0KICAgICAgICAgICAgIHJl YWRlciA9IE1vZGVsLmdldFhtaVJlYWRlcigpOw0KLSAgICAgICAgICAgIA0KKw0KICAgICAgICAg ICAgIGlmIChDb25maWd1cmF0aW9uLmdldEJvb2xlYW4oQXJnby5LRVlfWE1JX1NUUklQX0RJQUdS QU1TLCBmYWxzZSkpIHsNCiAgICAgICAgICAgICAgICAgLy8gVE9ETzogTm90IGltcGxlbWVudGVk IGJ5IGVVTUwNCiAgICAgICAgICAgICAgICAgcmVhZGVyLnNldElnbm9yZWRFbGVtZW50cyhuZXcg U3RyaW5nW10geyJVTUw6RGlhZ3JhbSJ9KTsNCkBAIC0yNTgsNyArMjYxLDcgQEANCiAgICAgICAg ICAgICB9DQogDQogICAgICAgICAgICAgTGlzdDxTdHJpbmc+IHNlYXJjaFBhdGggPSByZWFkZXIu Z2V0U2VhcmNoUGF0aCgpOw0KLSAgICAgICAgICAgIFN0cmluZyBwYXRoTGlzdCA9IA0KKyAgICAg ICAgICAgIFN0cmluZyBwYXRoTGlzdCA9DQogICAgICAgICAgICAgICAgIFN5c3RlbS5nZXRQcm9w ZXJ0eSgib3JnLmFyZ291bWwubW9kZWwubW9kdWxlc19zZWFyY2hfcGF0aCIpOw0KICAgICAgICAg ICAgIGlmIChwYXRoTGlzdCAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAgIFN0cmluZ1tdIHBh dGhzID0gcGF0aExpc3Quc3BsaXQoIiwiKTsNCkBAIC0yNjksNyArMjcyLDcgQEANCiAgICAgICAg ICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICByZWFkZXIuYWRkU2VhcmNo UGF0aChzb3VyY2UuZ2V0U3lzdGVtSWQoKSk7DQotICAgICAgICAgICAgDQorDQogICAgICAgICAg ICAgY3VyTW9kZWwgPSBudWxsOw0KICAgICAgICAgICAgIGVsZW1lbnRzUmVhZCA9IHJlYWRlci5w YXJzZShzb3VyY2UsIGZhbHNlKTsNCiAgICAgICAgICAgICBpZiAoZWxlbWVudHNSZWFkICE9IG51 bGwgJiYgIWVsZW1lbnRzUmVhZC5pc0VtcHR5KCkpIHsNCkBAIC0yNzksMTQgKzI4MiwxOCBAQA0K ICAgICAgICAgICAgICAgICB3aGlsZSAoZWxlbWVudHMuaGFzTmV4dCgpKSB7DQogICAgICAgICAg ICAgICAgICAgICBjdXJyZW50ID0gZWxlbWVudHMubmV4dCgpOw0KICAgICAgICAgICAgICAgICAg ICAgaWYgKGZhY2FkZS5pc0FNb2RlbChjdXJyZW50KSkgew0KLSAgICAgICAgICAgICAgICAgICAg ICAgIExPRy5pbmZvKCJMb2FkZWQgbW9kZWwgJyIgKyBmYWNhZGUuZ2V0TmFtZShjdXJyZW50KQ0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiciKTsNCisgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoTE9HLmlzTG9nZ2FibGUoTGV2ZWwuSU5GTykpIHsNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJMb2FkZWQgbW9kZWwgezB9IiwNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmYWNhZGUuZ2V0TmFtZShjdXJyZW50KSk7DQorICAgICAgICAg ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJNb2RlbCA9 PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ck1vZGVsID0gY3VycmVu dDsNCiAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICB9IGVs c2UgaWYgKGZhY2FkZS5pc0FQcm9maWxlKGN1cnJlbnQpKSB7DQotICAgICAgICAgICAgICAgICAg ICAgICAgTE9HLmluZm8oIkxvYWRlZCBwcm9maWxlICciICsgZmFjYWRlLmdldE5hbWUoY3VycmVu dCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICInIik7DQorICAgICAgICAg ICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIkxvYWRlZCBwcm9maWxlICciICsgZmFjYWRlLmdldE5hbWUoY3VycmVudCkN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiciKTsNCiAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoY3VyTW9kZWwgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjdXJNb2RlbCA9IGN1cnJlbnQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgfQ0K QEAgLTI5NCw3ICszMDEsNyBAQA0KICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogYWRkIHN0 ZXJlb3R5cGUgYXBwbGljYXRpb24gKGVDb3JlIEFueVR5cGU/KQ0KICAgICAgICAgICAgICAgICB9 DQogICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHVVSURSZWZzID0gDQorICAgICAgICAgICAg dVVJRFJlZnMgPQ0KICAgICAgICAgICAgICAgICBuZXcgSGFzaE1hcDxTdHJpbmcsIE9iamVjdD4o cmVhZGVyLmdldFhNSVVVSURUb09iamVjdE1hcCgpKTsNCiAgICAgICAgIH0gY2F0Y2ggKFhtaUV4 Y2VwdGlvbiBleCkgew0KICAgICAgICAgICAgIHRocm93IG5ldyBYbWlGb3JtYXRFeGNlcHRpb24o ZXgpOw0KQEAgLTMwMywzMSArMzEwLDMxIEBADQogICAgICAgICAgICAgLy8gdG8gaGFuZGxlIGRp ZmZlcmVudGx5PyAgRG9uJ3QgdGhpbmsgc28uICAtIHRmbQ0KICAgICAgICAgICAgIHRocm93IG5l dyBYbWlGb3JtYXRFeGNlcHRpb24oZXgpOw0KICAgICAgICAgfQ0KLSAgICAgICAgTE9HLmluZm8o Ij09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOw0KKyAgICAgICAgTE9H LmxvZyhMZXZlbC5JTkZPLCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Iik7DQogICAgIH0NCiANCiAgICAgLyoqDQogICAgICAqIENyZWF0ZSBhbmQgcmVnaXN0ZXIgZGlh Z3JhbXMgZm9yIGFjdGl2aXR5IGFuZCBzdGF0ZW1hY2hpbmVzIGluIHRoZQ0KICAgICAgKiBtb2Rl bChzKSBvZiB0aGUgcHJvamVjdC4gSWYgbm8gb3RoZXIgZGlhZ3JhbXMgYXJlIGNyZWF0ZWQsIGEg ZGVmYXVsdA0KICAgICAgKiBDbGFzcyBEaWFncmFtIHdpbGwgYmUgY3JlYXRlZC4gQXJnb1VNTCBj dXJyZW50bHkgcmVxdWlyZXMgYXQgbGVhc3Qgb25lDQotICAgICAqIGRpYWdyYW0gZm9yIHByb3Bl ciBvcGVyYXRpb24uIA0KLSAgICAgKiANCisgICAgICogZGlhZ3JhbSBmb3IgcHJvcGVyIG9wZXJh dGlvbi4NCisgICAgICoNCiAgICAgICogVE9ETzogTW92ZSB0byBYbWlGaWxlUGVyc2lzdGVyIChw cm90ZWN0ZWQpDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAcGFyYW0gcHJvamVjdA0KICAg ICAgKiAgICAgICAgICAgIFRoZSBwcm9qZWN0DQogICAgICAqLw0KICAgICBwdWJsaWMgdm9pZCBy ZWdpc3RlckRpYWdyYW1zKFByb2plY3QgcHJvamVjdCkgew0KICAgICAgICAgcmVnaXN0ZXJEaWFn cmFtc0ludGVybmFsKHByb2plY3QsIGVsZW1lbnRzUmVhZCwgdHJ1ZSk7DQogICAgIH0NCi0gICAg DQorDQogDQogICAgIC8qKg0KICAgICAgKiBJbnRlcm5hbCBtZXRob2QgY3JlYXRlIGRpYWdyYW1z IGZvciBhY3Rpdml0eSBncmFwaHMgYW5kIHN0YXRlIG1hY2hpbmVzLg0KICAgICAgKiBJdCBleGlz dHMgc29sZXkgdG8gY29udGFpbiBjb21tb24gZnVuY3Rpb25hbGl0eSBmcm9tIHRoZSB0d28gcHVi bGljDQogICAgICAqIG1ldGhvZHMuICBJdCBjYW4gYmUgbWVyZ2VkIGludG8gaXRzIGNhbGxlciB3 aGVuIHRoZSBkZXByZWNhdGVkIHZlcnNpb24NCiAgICAgICogb2YgdGhlIHB1YmxpYyBtZXRob2Qg Z29lcyBhd2F5Lg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIHByb2plY3QNCiAg ICAgICogICAgICAgICAgICBUaGUgcHJvamVjdA0KICAgICAgKiBAcGFyYW0gZWxlbWVudHMNCkBA IC0zNTksMjAgKzM2NiwzMSBAQA0KICAgICAgICAgICAgICAgICBuYW1lc3BhY2UgPSBmYWNhZGUu Z2V0Q29udGV4dChzdGF0ZW1hY2hpbmUpOw0KICAgICAgICAgICAgICAgICBNb2RlbC5nZXRDb3Jl SGVscGVyKCkuc2V0TmFtZXNwYWNlKHN0YXRlbWFjaGluZSwgbmFtZXNwYWNlKTsNCiAgICAgICAg ICAgICB9DQotICAgICAgICAgICAgDQorDQogICAgICAgICAgICAgQXJnb0RpYWdyYW0gZGlhZ3Jh bSA9IG51bGw7DQogICAgICAgICAgICAgaWYgKGZhY2FkZS5pc0FBY3Rpdml0eUdyYXBoKHN0YXRl bWFjaGluZSkpIHsNCi0gICAgICAgICAgICAgICAgTE9HLmluZm8oIkNyZWF0aW5nIGFjdGl2aXR5 IGRpYWdyYW0gZm9yICINCi0gICAgICAgICAgICAgICAgICAgICAgICArIGZhY2FkZS5nZXRVTUxD bGFzc05hbWUoc3RhdGVtYWNoaW5lKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICsgIjw8IiAr IGZhY2FkZS5nZXROYW1lKHN0YXRlbWFjaGluZSkgKyAiPj4iKTsNCisgICAgICAgICAgICAgICAg aWYgKExPRy5pc0xvZ2dhYmxlKExldmVsLklORk8pKSB7DQorICAgICAgICAgICAgICAgICAgICBM T0cubG9nKExldmVsLklORk8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDcmVhdGlu ZyBhY3Rpdml0eSBkaWFncmFtIGZvciB7MH08PHsxfT4+IiwNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbmV3IE9iamVjdFtdIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZhY2FkZS5nZXRVTUxDbGFzc05hbWUoc3RhdGVtYWNoaW5lKSwNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZhY2FkZS5nZXROYW1lKHN0YXRlbWFjaGluZSkNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfSk7DQorICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg ICAgZGlhZ3JhbSA9IGRpYWdyYW1GYWN0b3J5LmNyZWF0ZURpYWdyYW0oDQogICAgICAgICAgICAg ICAgICAgICAgICAgRGlhZ3JhbVR5cGUuQWN0aXZpdHksDQogICAgICAgICAgICAgICAgIAluYW1l c3BhY2UsDQogICAgICAgICAgICAgICAgIAlzdGF0ZW1hY2hpbmUpOw0KICAgICAgICAgICAgIH0g ZWxzZSB7DQotICAgICAgICAgICAgICAgIExPRy5pbmZvKCJDcmVhdGluZyBzdGF0ZSBkaWFncmFt IGZvciAiDQotICAgICAgICAgICAgICAgICAgICAgICAgKyBmYWNhZGUuZ2V0VU1MQ2xhc3NOYW1l KHN0YXRlbWFjaGluZSkNCi0gICAgICAgICAgICAgICAgICAgICAgICArICI8PCIgKyBmYWNhZGUu Z2V0TmFtZShzdGF0ZW1hY2hpbmUpICsgIj4+Iik7DQorICAgICAgICAgICAgICAgIGlmIChMT0cu aXNMb2dnYWJsZShMZXZlbC5JTkZPKSkgew0KKyAgICAgICAgICAgICAgICAgICAgTE9HLmxvZyhM ZXZlbC5JTkZPLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ3JlYXRpbmcgYWN0aXZp dHkgZGlhZ3JhbSBmb3IgezB9PDx7MX0+PiIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5ldyBPYmplY3RbXSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNhZGUu Z2V0VU1MQ2xhc3NOYW1lKHN0YXRlbWFjaGluZSksDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmYWNhZGUuZ2V0TmFtZShzdGF0ZW1hY2hpbmUpDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0pOw0KKyAgICAgICAgICAgICAgICB9DQorDQogICAgICAgICAgICAgICAgIGRp YWdyYW0gPSBkaWFncmFtRmFjdG9yeS5jcmVhdGVEaWFncmFtKA0KICAgICAgICAgICAgICAgICAg ICAgICAgIERpYWdyYW1UeXBlLlN0YXRlLA0KICAgICAgICAgICAgICAgICAJbmFtZXNwYWNlLA0K QEAgLTM4MSwxMyArMzk5LDEzIEBADQogICAgICAgICAgICAgaWYgKGRpYWdyYW0gIT0gbnVsbCkg ew0KICAgICAgICAgICAgICAgICBwcm9qZWN0LmFkZE1lbWJlcihkaWFncmFtKTsNCiAgICAgICAg ICAgICB9DQotICAgICAgICAgICAgDQorDQogICAgICAgICB9DQogICAgICAgICAvLyBJU1NVRSAz NTE2IDogTWFrZSBzdXJlIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBkaWFncmFtIGJlY2F1c2UNCiAg ICAgICAgIC8vIEFyZ29VTUwgcmVxdWlyZXMgaXQgZm9yIGNvcnJlY3Qgb3BlcmF0aW9uDQogICAg ICAgICBpZiAoYXRMZWFzdE9uZSAmJiBwcm9qZWN0LmdldERpYWdyYW1Db3VudCgpIDwgMSkgew0K ICAgICAgICAgICAgIEFyZ29EaWFncmFtIGQgPSBkaWFncmFtRmFjdG9yeS5jcmVhdGUoDQotICAg ICAgICAgICAgICAgICAgICBEaWFncmFtVHlwZS5DbGFzcywgY3VyTW9kZWwsIA0KKyAgICAgICAg ICAgICAgICAgICAgRGlhZ3JhbVR5cGUuQ2xhc3MsIGN1ck1vZGVsLA0KICAgICAgICAgICAgICAg ICAgICAgcHJvamVjdC5nZXRQcm9qZWN0U2V0dGluZ3MoKS5nZXREZWZhdWx0RGlhZ3JhbVNldHRp bmdzKCkpOw0KICAgICAgICAgICAgIHByb2plY3QuYWRkTWVtYmVyKGQpOw0KICAgICAgICAgfQ0K DQpNb2RpZmllZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0 ZW5jZS9PbGRaYXJnb0ZpbGVQZXJzaXN0ZXIuamF2YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50aWdy aXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29y Zy9hcmdvdW1sL3BlcnNpc3RlbmNlL09sZFphcmdvRmlsZVBlcnNpc3Rlci5qYXZhP3ZpZXc9ZGlm ZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Ci0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3BlcnNpc3RlbmNlL09s ZFphcmdvRmlsZVBlcnNpc3Rlci5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3Vt bC1hcHAvc3JjL29yZy9hcmdvdW1sL3BlcnNpc3RlbmNlL09sZFphcmdvRmlsZVBlcnNpc3Rlci5q YXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTQ4LDEwICs0OCwxMSBAQA0KIGltcG9y dCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCiBp bXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2 ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiBpbXBvcnQgamF2YS51dGls LnppcC5aaXBFbnRyeTsNCiBpbXBvcnQgamF2YS51dGlsLnppcC5aaXBPdXRwdXRTdHJlYW07DQog DQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5h cHBsaWNhdGlvbi5oZWxwZXJzLkFwcGxpY2F0aW9uVmVyc2lvbjsNCiBpbXBvcnQgb3JnLmFyZ291 bWwuaTE4bi5UcmFuc2xhdG9yOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5rZXJuZWwuUHJvamVjdDsN CkBAIC03MSw3ICs3Miw3IEBADQogICAgICAqIExvZ2dlci4NCiAgICAgICovDQogICAgIHByaXZh dGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KLQlMb2dnZXIuZ2V0TG9nZ2VyKE9sZFphcmdv RmlsZVBlcnNpc3Rlci5jbGFzcyk7DQorICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKE9sZFphcmdv RmlsZVBlcnNpc3Rlci5jbGFzcy5nZXROYW1lKCkpOw0KIA0KICAgICAvKioNCiAgICAgICogVGhp cyBpcyB0aGUgb2xkIHZlcnNpb24gb2YgdGhlIEFyZ29VTUwgdGVlIGZpbGUgd2hpY2ggZG9lcyBu b3QgY29udGFpbg0KQEAgLTc5LDcgKzgwLDcgQEANCiAgICAgICovDQogICAgIHByaXZhdGUgc3Rh dGljIGZpbmFsIFN0cmluZyBBUkdPX01JTklfVEVFID0NCiAgICAgICAgICIvb3JnL2FyZ291bWwv cGVyc2lzdGVuY2UvYXJnby50ZWUiOw0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIFRoZSBj b25zdHJ1Y3Rvci4NCiAgICAgICovDQpAQCAtOTIsMTQgKzkzLDE0IEBADQogICAgIHByb3RlY3Rl ZCBTdHJpbmcgZ2V0RGVzYygpIHsNCiAgICAgICAgIHJldHVybiBUcmFuc2xhdG9yLmxvY2FsaXpl KCJjb21ib2JveC5maWxlZmlsdGVyLnphcmdvIik7DQogICAgIH0NCi0gICAgDQorDQogICAgIC8q DQogICAgICAqIEBzZWUgb3JnLmFyZ291bWwucGVyc2lzdGVuY2UuQWJzdHJhY3RGaWxlUGVyc2lz dGVyI2lzU2F2ZUVuYWJsZWQoKQ0KICAgICAgKi8NCiAgICAgcHVibGljIGJvb2xlYW4gaXNTYXZl RW5hYmxlZCgpIHsNCiAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICB9DQotICAgIA0KKw0KICAg ICAvKioNCiAgICAgICogU2F2ZSB0aGUgcHJvamVjdCBpbiAiLnphcmdvIiBmb3JtYXQuDQogICAg ICAqDQpAQCAtMTE0LDE3ICsxMTUsMTcgQEANCiAgICAgICogQHNlZSBvcmcuYXJnb3VtbC5wZXJz aXN0ZW5jZS5Qcm9qZWN0RmlsZVBlcnNpc3RlciNzYXZlKA0KICAgICAgKiAgICAgIG9yZy5hcmdv dW1sLmtlcm5lbC5Qcm9qZWN0LCBqYXZhLmlvLkZpbGUpDQogICAgICAqLw0KLSAgICBwdWJsaWMg dm9pZCBkb1NhdmUoUHJvamVjdCBwcm9qZWN0LCBGaWxlIGZpbGUpIHRocm93cyBTYXZlRXhjZXB0 aW9uLCANCisgICAgcHVibGljIHZvaWQgZG9TYXZlKFByb2plY3QgcHJvamVjdCwgRmlsZSBmaWxl KSB0aHJvd3MgU2F2ZUV4Y2VwdGlvbiwNCiAgICAgSW50ZXJydXB0ZWRFeGNlcHRpb24gew0KIA0K LSAgICAgICAgLyogUmV0YWluIHRoZSBwcmV2aW91cyBwcm9qZWN0IGZpbGUgZXZlbiB3aGVuIHRo ZSBzYXZlIG9wZXJhdGlvbiANCisgICAgICAgIC8qIFJldGFpbiB0aGUgcHJldmlvdXMgcHJvamVj dCBmaWxlIGV2ZW4gd2hlbiB0aGUgc2F2ZSBvcGVyYXRpb24NCiAgICAgICAgICAqIGNyYXNoZXMg aW4gdGhlIG1pZGRsZS4gQWxzbyBjcmVhdGUgYSBiYWNrdXAgZmlsZSBhZnRlciBzYXZpbmcuICov DQogICAgICAgICBib29sZWFuIGRvU2FmZVNhdmVzID0gdXNlU2FmZVNhdmVzKCk7DQogDQogICAg ICAgICBQcm9ncmVzc01nciBwcm9ncmVzc01nciA9IG5ldyBQcm9ncmVzc01ncigpOw0KICAgICAg ICAgcHJvZ3Jlc3NNZ3Iuc2V0TnVtYmVyT2ZQaGFzZXMoNCk7DQogICAgICAgICBwcm9ncmVzc01n ci5uZXh0UGhhc2UoKTsNCi0gICAgICAgIA0KKw0KICAgICAgICAgRmlsZSBsYXN0QXJjaGl2ZUZp bGUgPSBuZXcgRmlsZShmaWxlLmdldEFic29sdXRlUGF0aCgpICsgIn4iKTsNCiAgICAgICAgIEZp bGUgdGVtcEZpbGUgPSBudWxsOw0KIA0KQEAgLTE2OSwxNyArMTcwLDE3IEBADQogICAgICAgICAg ICAgd3JpdGVyLmZsdXNoKCk7DQogDQogICAgICAgICAgICAgc3RyZWFtLmNsb3NlRW50cnkoKTsN Ci0gICAgICAgICAgICANCisNCiAgICAgICAgICAgICBpbnQgY291bnRlciA9IDA7DQogICAgICAg ICAgICAgaW50IHNpemUgPSBwcm9qZWN0LmdldE1lbWJlcnMoKS5zaXplKCk7DQogICAgICAgICAg ICAgQ29sbGVjdGlvbjxTdHJpbmc+IG5hbWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7DQog ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsNCiAgICAgICAgICAg ICAgICAgUHJvamVjdE1lbWJlciBwcm9qZWN0TWVtYmVyID0gcHJvamVjdC5nZXRNZW1iZXJzKCku Z2V0KGkpOw0KICAgICAgICAgICAgICAgICBpZiAoIShwcm9qZWN0TWVtYmVyLmdldFR5cGUoKS5l cXVhbHNJZ25vcmVDYXNlKCJ4bWkiKSkpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChMT0cu aXNJbmZvRW5hYmxlZCgpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgTE9HLmluZm8oIlNh dmluZyBtZW1iZXI6ICIgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHByb2pl Y3QuZ2V0TWVtYmVycygpLmdldChpKS5nZXRaaXBOYW1lKCkpOw0KLSAgICAgICAgICAgICAgICAg ICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgICAgICBMT0cubG9n KExldmVsLklORk8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTYXZpbmcgbWVtYmVy OiB7MH0iLCBwcm9qZWN0TWVtYmVyLmdldFppcE5hbWUoKSk7DQorDQogICAgICAgICAgICAgICAg ICAgICBTdHJpbmcgbmFtZSA9IHByb2plY3RNZW1iZXIuZ2V0WmlwTmFtZSgpOw0KICAgICAgICAg ICAgICAgICAgICAgU3RyaW5nIG9yaWdpbmFsTmFtZSA9IG5hbWU7DQogICAgICAgICAgICAgICAg ICAgICB3aGlsZSAobmFtZXMuY29udGFpbnMobmFtZSkpIHsNCkBAIC0xOTUsMTQgKzE5NiwxNSBA QA0KICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmNsb3NlRW50cnkoKTsNCiAgICAgICAgICAg ICAgICAgfQ0KICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICANCisNCiAgICAgICAgICAgICBm b3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgew0KICAgICAgICAgICAgICAgICBQcm9qZWN0 TWVtYmVyIHByb2plY3RNZW1iZXIgPSBwcm9qZWN0LmdldE1lbWJlcnMoKS5nZXQoaSk7DQogICAg ICAgICAgICAgICAgIGlmIChwcm9qZWN0TWVtYmVyLmdldFR5cGUoKS5lcXVhbHNJZ25vcmVDYXNl KCJ4bWkiKSkgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKExPRy5pc0luZm9FbmFibGVkKCkp IHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBMT0cuaW5mbygiU2F2aW5nIG1lbWJlciBvZiB0 eXBlOiAiDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHByb2plY3QuZ2V0TWVt YmVycygpLmdldChpKS5nZXRUeXBlKCkpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAg ICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLklORk8s DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTYXZpbmcgbWVtYmVyIG9mIHR5cGU6IHsw fSIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RNZW1iZXIuZ2V0VHlwZSgp KTsNCisNCiAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5wdXROZXh0RW50cnkoDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5ldyBaaXBFbnRyeShwcm9qZWN0TWVtYmVyLmdldFppcE5h bWUoKSkpOw0KICAgICAgICAgICAgICAgICAgICAgT2xkTW9kZWxNZW1iZXJGaWxlUGVyc2lzdGVy IHBlcnNpc3RlciA9DQpAQCAtMjI0LDEzICsyMjYsMTMgQEANCiAgICAgICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgICAgICBpZiAodGVtcEZpbGUuZXhpc3RzKCkpIHsNCiAgICAgICAgICAgICAg ICAgICAgIHRlbXBGaWxlLmRlbGV0ZSgpOw0KLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAg DQorICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICB9DQogDQogICAgICAgICAgICAgcHJv Z3Jlc3NNZ3IubmV4dFBoYXNlKCk7DQogDQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkg ew0KLSAgICAgICAgICAgIExPRy5lcnJvcigiRXhjZXB0aW9uIG9jY3VyZWQgZHVyaW5nIHNhdmUg YXR0ZW1wdCIsIGUpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiRXhjZXB0 aW9uIG9jY3VyZWQgZHVyaW5nIHNhdmUgYXR0ZW1wdCIsIGUpOw0KICAgICAgICAgICAgIHRyeSB7 DQogICAgICAgICAgICAgICAgIHdyaXRlci5jbG9zZSgpOw0KICAgICAgICAgICAgIH0gY2F0Y2gg KEV4Y2VwdGlvbiBleCkgew0KQEAgLTI1MSwxNiArMjUzLDE2IEBADQogICAgICAgICB0cnkgew0K ICAgICAgICAgICAgIHdyaXRlci5jbG9zZSgpOw0KICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRp b24gZXgpIHsNCi0gICAgICAgICAgICBMT0cuZXJyb3IoIkZhaWxlZCB0byBjbG9zZSBzYXZlIG91 dHB1dCB3cml0ZXIiLCBleCk7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsICJG YWlsZWQgdG8gY2xvc2Ugc2F2ZSBvdXRwdXQgd3JpdGVyIiwgZXgpOw0KICAgICAgICAgfQ0KICAg ICB9DQotICAgIA0KKw0KICAgICAvKioNCiAgICAgICogVGhlIC56YXJnbyBzYXZlIGZvcm1hdCBp cyBhYmxlIHRvIHNhdmUuIFdlIG11c3Qgb3ZlcnJpZGUNCiAgICAgICogVW1sRmlsZVBlcnNpc3Rl ciB3aGljaCBoYXMgdHVybmVkIHRoaXMgb2ZmIChzdWdnZXN0cyBhIG5lZWQgZm9yIHNvbWUNCiAg ICAgICogcmVmYWN0b3JpbmcgaGVyZSkNCiAgICAgICogQHNlZSBvcmcuYXJnb3VtbC5wZXJzaXN0 ZW5jZS5BYnN0cmFjdEZpbGVQZXJzaXN0ZXIjaXNTYXZlRW5hYmxlZCgpDQotICAgICAqIA0KKyAg ICAgKg0KICAgICAgKiBAcmV0dXJuIGJvb2xlYW4NCiAgICAgICovDQogICAgIHB1YmxpYyBib29s ZWFuIGlzTG9hZEVuYWJsZWQoKSB7DQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAv c3JjL29yZy9hcmdvdW1sL3BlcnNpc3RlbmNlL1BHTUxTdGFja1BhcnNlci5qYXZhDQpVcmw6IGh0 dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5rL3NyYy9h cmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcGVyc2lzdGVuY2UvUEdNTFN0YWNrUGFyc2VyLmph dmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcGVy c2lzdGVuY2UvUEdNTFN0YWNrUGFyc2VyLmphdmEJKG9yaWdpbmFsKQ0KKysrIHRydW5rL3NyYy9h cmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcGVyc2lzdGVuY2UvUEdNTFN0YWNrUGFyc2VyLmph dmEJMjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMSw2ICsxLDYgQEANCiAvKiAkSWQkDQog ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA5IENvbnRyaWJ1dG9y cyAtIHNlZSBiZWxvdw0KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEyIENvbnRyaWJ1dG9ycyAt IHNlZSBiZWxvdw0KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhl IGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAgKiB3aGljaCBhY2Nv bXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KQEAgLTUwLDgg KzUwLDkgQEANCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQogaW1wb3J0IGphdmEudXRpbC5NYXA7 DQogaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7DQoraW1wb3J0IGphdmEudXRpbC5s b2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQotaW1w b3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5tb2RlbC5N b2RlbDsNCiBpbXBvcnQgb3JnLmFyZ291bWwudW1sLmRpYWdyYW0uQXJnb0RpYWdyYW07DQogaW1w b3J0IG9yZy5hcmdvdW1sLnVtbC5kaWFncmFtLkRpYWdyYW1FZGdlU2V0dGluZ3M7DQpAQCAtODEs MTIgKzgyLDEzIEBADQogLyoqDQogICogVGhlIFBHTUwgUGFyc2VyLg0KICAqIDxwPg0KLSAqIA0K KyAqDQogICogVGhpcyByZXBsYWNlcyBtdWNoIG9mIHRoZSBpZGVudGljYWxseSBuYW1lZCBjbGFz cyBmcm9tIEdFRi4NCiAgKi8NCiBjbGFzcyBQR01MU3RhY2tQYXJzZXIgZXh0ZW5kcyBvcmcudGln cmlzLmdlZi5wZXJzaXN0ZW5jZS5wZ21sLlBHTUxTdGFja1BhcnNlciB7DQogDQotICAgIHByaXZh dGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dnZXIuZ2V0TG9nZ2VyKFBHTUxTdGFja1Bh cnNlci5jbGFzcyk7DQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KKyAg ICAgICAgTG9nZ2VyLmdldExvZ2dlcihQR01MU3RhY2tQYXJzZXIuY2xhc3MuZ2V0TmFtZSgpKTsN CiANCiAgICAgcHJpdmF0ZSBMaXN0PEVkZ2VEYXRhPiBmaWdFZGdlcyA9IG5ldyBBcnJheUxpc3Q8 RWRnZURhdGE+KDUwKTsNCiANCkBAIC0xMjksNyArMTMxLDcgQEANCiAgICAgLyoqDQogICAgICAq IENvbnN0cnVjdCBhIFBHTUwgcGFyc2VyIHdpdGggdGhlIGdpdmVuIEhSRUYvT2JqZWN0IG1hcCBh bmQgZGVmYXVsdA0KICAgICAgKiBkaWFncmFtIHNldHRpbmdzLg0KLSAgICAgKiANCisgICAgICoN CiAgICAgICogQHBhcmFtIG1vZGVsRWxlbWVudHNCeVV1aWQgbWFwIG9mIEhSRUYgaWRzIHRvIG9i amVjdHMgdXNlZCB0byBhc3NvY2lhdGUNCiAgICAgICogICAgICAgICAgICBGaWdzIHdpdGggdGhl aXIgb3duaW5nIG1vZGVsIGVsZW1lbnRzDQogICAgICAqIEBwYXJhbSBkZWZhdWx0U2V0dGluZ3Mg ZGVmYXVsdCBkaWFncmFtIHNldHRpbmdzIHRvIHVzZSBmb3IgbmV3bHkgY3JlYXRlZA0KQEAgLTE1 OSw3ICsxNjEsNyBAQA0KICAgICAgICAgaWYgKGhyZWYgIT0gbnVsbCkgew0KICAgICAgICAgICAg IG93bmVyID0gZmluZE93bmVyKGhyZWYpOw0KICAgICAgICAgICAgIGlmIChvd25lciA9PSBudWxs KSB7DQotICAgICAgICAgICAgICAgIExPRy53YXJuKCJGb3VuZCBocmVmIG9mICIgKyBocmVmDQor ICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuV0FSTklORywgIkZvdW5kIGhyZWYgb2YgIiAr IGhyZWYNCiAgICAgICAgICAgICAgICAgICAgICAgICArICIgd2l0aCBubyBtYXRjaGluZyBlbGVt ZW50IGluIG1vZGVsIik7DQogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICAg ICAgIH0NCkBAIC0yMDIsNyArMjA0LDcgQEANCiAgICAgICAgICAgICBGaWdHcm91cCBncm91cCA9 IChGaWdHcm91cCkgZjsNCiAgICAgICAgICAgICBTdHJpbmcgY2xzTmFtZUJvdW5kcyA9IGF0dHJM aXN0LmdldFZhbHVlKCJkZXNjcmlwdGlvbiIpOw0KICAgICAgICAgICAgIGlmIChjbHNOYW1lQm91 bmRzICE9IG51bGwpIHsNCi0gICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gDQor ICAgICAgICAgICAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9DQogICAgICAgICAgICAgICAgICAg ICBuZXcgU3RyaW5nVG9rZW5pemVyKGNsc05hbWVCb3VuZHMsICIsO1tdICIpOw0KICAgICAgICAg ICAgICAgICAvLyBEaXNjYXJkIGNsYXNzIG5hbWUsIHggeSB3IGgNCiAgICAgICAgICAgICAgICAg aWYgKHN0Lmhhc01vcmVFbGVtZW50cygpKSB7DQpAQCAtMjM5LDcgKzI0MSw3IEBADQogICAgICAg ICBpZiAoaHJlZiAhPSBudWxsICYmICFocmVmLmVxdWFscygiIikpIHsNCiAgICAgICAgICAgICBP YmplY3QgbW9kZWxFbGVtZW50ID0gZmluZE93bmVyKGhyZWYpOw0KICAgICAgICAgICAgIGlmICht b2RlbEVsZW1lbnQgPT0gbnVsbCkgew0KLSAgICAgICAgICAgICAgICBMT0cuZXJyb3IoIkNhbid0 IGZpbmQgaHJlZiBvZiAiICsgaHJlZik7DQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwu U0VWRVJFLCAiQ2FuJ3QgZmluZCBocmVmIG9mICIgKyBocmVmKTsNCiAgICAgICAgICAgICAgICAg dGhyb3cgbmV3IFNBWEV4Y2VwdGlvbigiRm91bmQgaHJlZiBvZiAiICsgaHJlZg0KICAgICAgICAg ICAgICAgICAgICAgICAgICsgIiB3aXRoIG5vIG1hdGNoaW5nIGVsZW1lbnQgaW4gbW9kZWwiKTsN CiAgICAgICAgICAgICB9DQpAQCAtMjUyLDggKzI1NCw5IEBADQogICAgICAgICAgICAgICAgICAg ICBmLnNldE93bmVyKG1vZGVsRWxlbWVudCk7DQogICAgICAgICAgICAgICAgIH0NCiAgICAgICAg ICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBMT0cuZGVidWcoIklnbm9yaW5nIGhyZWYg b24gIiArIGYuZ2V0Q2xhc3MoKS5nZXROYW1lKCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAr ICIgYXMgaXQncyBhbHJlYWR5IHNldCIpOw0KKyAgICAgICAgICAgICAgICBMT0cubG9nKExldmVs LkZJTkUsDQorICAgICAgICAgICAgICAgICAgICAgICAgIklnbm9yaW5nIGhyZWYgb24gezB9IGFz IGl0J3MgYWxyZWFkeSBzZXQiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIGYuZ2V0Q2xhc3Mo KS5nZXROYW1lKCkpOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgfQ0KQEAgLTI2 Niw3ICsyNjksNyBAQA0KICAgICAgKiBuYW1lLiBUaGUgY3VycmVudCBhcHBsaWNhYmxlIG5hbWVz IGFyZSBvcGVyYXRpb25zVmlzaWJsZSBhbmQNCiAgICAgICogYXR0cmlidXRlc1Zpc2libGUgYW5k IGFyZSB1c2VkIHRvIHNob3cgb3IgaGlkZSB0aGUgY29tcGFydG1lbnRzIHdpdGhpbg0KICAgICAg KiBDbGFzcyBhbmQgSW50ZXJmYWNlLiBUaGUgZGVmYXVsdCB2YWx1ZXMgYXJlIHRydWUuDQotICAg ICAqIA0KKyAgICAgKg0KICAgICAgKiBAcGFyYW0gc3QgVGhlIFN0cmlua1Rva2VuaXplciBwb3Np dGlvbmVkIGF0IHRoZSBmaXJzdCBzdHlsZSBpZGVudGlmaWVyDQogICAgICAqIEByZXR1cm4gYSBt YXAgb2YgYXR0cmlidXRlcw0KICAgICAgKi8NCkBAIC0yOTQsMTAgKzI5NywxMCBAQA0KICAgICAv KioNCiAgICAgICogU2V0IHRoZSBmaWcgc3R5bGUgYXR0cmlidXRlcy4NCiAgICAgICogPHA+DQot ICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBUT0RPOiBUaGlzIHNob3VsZCBtb3ZlIGludG8gdGhl IHJlbmRlciBmYWN0b3JpZXMgYXMgZGVzY3JpYmVkIGluIGlzc3VlDQogICAgICAqIDg1OS4NCi0g ICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBmaWcgdGhlIGZpZyB0byBzdHlsZS4NCiAg ICAgICogQHBhcmFtIGF0dHJpYnV0ZU1hcCBhIG1hcCBvZiBuYW1lIHZhbHVlIHBhaXJzDQogICAg ICAqLw0KQEAgLTM0MCw3ICszNDMsNyBAQA0KIA0KICAgICAvKioNCiAgICAgICogUmVhZCBhbmQg cGFyc2UgdGhlIGlucHV0IHN0cmVhbSB0byBjcmVhdGUgYSBuZXcgZGlhZ3JhbSBhbmQgcmV0dXJu IGl0Lg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIGlzIHRoZSBpbnB1dCBzdHJl YW0NCiAgICAgICogQHBhcmFtIGNsb3NlU3RyZWFtIHRydWUgdG8gY2xvc2UgdGhlIHN0cmVhbSB3 aGVuIHBhcnNpbmcgaXMgY29tcGxldGUNCiAgICAgICogQHJldHVybiB0aGUgZGlhZ3JhbSBjcmVh dGVkIGFzIGEgcmVzdWx0IG9mIHRoZSBwYXJzZQ0KQEAgLTM2Niw3ICszNjksNyBAQA0KIA0KICAg ICAvKioNCiAgICAgICogUmVhZCBhbmQgcGFyc2UgdGhlIGlucHV0IHN0cmVhbSB0byBjcmVhdGUg YSBuZXcgZGlhZ3JhbSBhbmQgcmV0dXJuIGl0Lg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICog QHBhcmFtIGlzIHRoZSBpbnB1dCBzdHJlYW0NCiAgICAgICogQHBhcmFtIGNsb3NlU3RyZWFtIHRy dWUgdG8gY2xvc2UgdGhlIHN0cmVhbSB3aGVuIHBhcnNpbmcgaXMgY29tcGxldGUNCiAgICAgICog QHJldHVybiB0aGUgZGlhZ3JhbSBjcmVhdGVkIGFzIGEgcmVzdWx0IG9mIHRoZSBwYXJzZQ0KQEAg LTM5OCw3ICs0MDEsNyBAQA0KICAgICAgKiBkaWFncmFtLiBUaGlzIG1ldGhvZCB0aGVuIGF0dGFj aGVzIHRoZSBlZGdlcyB0byB0aGUgY29ycmVjdCBub2RlLA0KICAgICAgKiBpbmNsdWRpbmcgdGhl IG5vZGVzIGNvbnRhaW5lZCB3aXRoaW4gZWRnZXMgYWxsb3dpbmcgZWRnZSB0byBlZGdlDQogICAg ICAqIGNvbm5lY3Rpb25zIGZvciBjb21tZW50IGVkZ2VzLCBhc3NvY2lhdGlvbiBjbGFzc2VzIGFu ZCBkZXBlbmRlbmNpZXMuDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAcGFyYW0gZCB0aGUg RGlhZ3JhbQ0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSB2b2lkIGF0dGFjaEVkZ2VzKERpYWdyYW0g ZCkgew0KQEAgLTQ0MCw3ICs0NDMsOCBAQA0KIA0KICAgICAgICAgICAgIGlmIChzb3VyY2VQb3J0 RmlnID09IG51bGwgfHwgZGVzdFBvcnRGaWcgPT0gbnVsbA0KICAgICAgICAgICAgICAgICAgICAg fHwgc291cmNlRmlnTm9kZSA9PSBudWxsIHx8IGRlc3RGaWdOb2RlID09IG51bGwpIHsNCi0gICAg ICAgICAgICAgICAgTE9HLmVycm9yKCJDYW4ndCBmaW5kIG5vZGVzIGZvciBGaWdFZGdlOiAiICsg ZWRnZS5nZXRJZCgpICsgIjoiDQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJF LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBmaW5kIG5vZGVzIGZvciBGaWdFZGdl OiAiICsgZWRnZS5nZXRJZCgpICsgIjoiDQogICAgICAgICAgICAgICAgICAgICAgICAgKyBlZGdl LnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgICAgICBlZGdlLnJlbW92ZUZyb21EaWFncmFtKCk7 DQogICAgICAgICAgICAgfSBlbHNlIHsNCkBAIC00NjYsNyArNDcwLDcgQEANCiAgICAgLy8gVE9E TzogTW92ZSB0byBHRUYNCiAgICAgLyoqDQogICAgICAqIFN0b3JlIGRhdGEgb2YgYSBGaWdFZGdl IHRvZ2V0aGVyIHdpdGggdGhlIGlkJ3Mgb2Ygbm9kZXMgdG8gY29ubmVjdCB0bw0KLSAgICAgKiAN CisgICAgICoNCiAgICAgICogQHBhcmFtIGZpZ0VkZ2UgVGhlIEZpZ0VkZ2UNCiAgICAgICogQHBh cmFtIHNvdXJjZVBvcnRGaWdJZCBUaGUgaWQgb2YgdGhlIHNvdXJjZSBwb3J0DQogICAgICAqIEBw YXJhbSBkZXN0UG9ydEZpZ0lkIFRoZSBpZCBvZiB0aGUgZGVzdGluYXRpb24gcG9ydA0KQEAgLTQ4 Myw3ICs0ODcsNyBAQA0KICAgICAvLyBUT0RPOiBNb3ZlIHRvIEdFRg0KICAgICAvKioNCiAgICAg ICogR2V0IHRoZSBGaWdOb2RlIHRoYXQgdGhlIGZpZyBpZCByZXByZXNlbnRzLg0KLSAgICAgKiAN CisgICAgICoNCiAgICAgICogQHBhcmFtIGZpZ0lkIChJbiB0aGUgZm9ybSBGaWd4LnkueikNCiAg ICAgICogQHJldHVybiB0aGUgRmlnTm9kZSB3aXRoIHRoZSBnaXZlbiBpZA0KICAgICAgKiBAdGhy b3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgZmlnSWQgc3VwcGxpZWQgaXMgbm90IG9m IGEgRmlnTm9kZQ0KQEAgLTUwOSw3ICs1MTMsOCBAQA0KICAgICAgICAgICAgIGlmIChmIGluc3Rh bmNlb2YgRmlnTm9kZSkgew0KICAgICAgICAgICAgICAgICByZXR1cm4gKEZpZ05vZGUpIGY7DQog ICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgTE9HLmVycm9yKCJGaWdJRCAi ICsgZmlnSWQgKyAiIGlzIG5vdCBhIG5vZGUsIGVkZ2UgaWdub3JlZCIpOw0KKyAgICAgICAgICAg ICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwNCisgICAgICAgICAgICAgICAgICAgICAgICAiRmln SUQgIiArIGZpZ0lkICsgIiBpcyBub3QgYSBub2RlLCBlZGdlIGlnbm9yZWQiKTsNCiAgICAgICAg ICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KQEAgLTUx OCw3ICs1MjMsNyBAQA0KICAgICAvLyBUT0RPOiBNb3ZlIHRvIEdFRg0KICAgICAvKioNCiAgICAg ICogR2V0IHRoZSBGaWcgZnJvbSB0aGUgRmlnTm9kZSB0aGF0IGlzIHRoZSBwb3J0Lg0KLSAgICAg KiANCisgICAgICoNCiAgICAgICogQHBhcmFtIGZpZ05vZGUgdGhlIEZpZ05vZGUNCiAgICAgICog QHJldHVybiB0aGUgRmlnIHRoYXQgaXMgdGhlIHBvcnQgb24gdGhlIGdpdmVuIEZpZ05vZGUNCiAg ICAgICovDQpAQCAtNTUyLDcgKzU1Nyw3IEBADQogDQogICAgICAgICAvKioNCiAgICAgICAgICAq IENvbnN0cnVjdG9yDQotICAgICAgICAgKiANCisgICAgICAgICAqDQogICAgICAgICAgKiBAcGFy YW0gZWRnZSBUaGUgRmlnRWRnZQ0KICAgICAgICAgICogQHBhcmFtIHNvdXJjZVBvcnRJZCBUaGUg aWQgb2YgdGhlIHNvdXJjZSBwb3J0DQogICAgICAgICAgKiBAcGFyYW0gZGVzdFBvcnRJZCBUaGUg aWQgb2YgdGhlIGRlc3RpbmF0aW9uIHBvcnQNCkBAIC01NzcsNyArNTgyLDcgQEANCiANCiAgICAg ICAgIC8qKg0KICAgICAgICAgICogR2V0IHRoZSBpZCBvZiB0aGUgZGVzdGluYXRpb24gRmlnTm9k ZQ0KLSAgICAgICAgICogDQorICAgICAgICAgKg0KICAgICAgICAgICogQHJldHVybiB0aGUgaWQN CiAgICAgICAgICAqLw0KICAgICAgICAgcHVibGljIFN0cmluZyBnZXREZXN0RmlnTm9kZUlkKCkg ew0KQEAgLTU4Niw3ICs1OTEsNyBAQA0KIA0KICAgICAgICAgLyoqDQogICAgICAgICAgKiBHZXQg dGhlIGlkIG9mIHRoZSBkZXN0aW5hdGlvbiBwb3J0DQotICAgICAgICAgKiANCisgICAgICAgICAq DQogICAgICAgICAgKiBAcmV0dXJuIHRoZSBpZA0KICAgICAgICAgICovDQogICAgICAgICBwdWJs aWMgU3RyaW5nIGdldERlc3RQb3J0RmlnSWQoKSB7DQpAQCAtNTk1LDcgKzYwMCw3IEBADQogDQog ICAgICAgICAvKioNCiAgICAgICAgICAqIEdldCB0aGUgRmlnRWRnZQ0KLSAgICAgICAgICogDQor ICAgICAgICAgKg0KICAgICAgICAgICogQHJldHVybiB0aGUgRmlnRWRnZQ0KICAgICAgICAgICov DQogICAgICAgICBwdWJsaWMgRmlnRWRnZSBnZXRGaWdFZGdlKCkgew0KQEAgLTYwNCw3ICs2MDks NyBAQA0KIA0KICAgICAgICAgLyoqDQogICAgICAgICAgKiBHZXQgdGhlIGlkIG9mIHRoZSBzb3Vy Y2UgRmlnTm9kZQ0KLSAgICAgICAgICogDQorICAgICAgICAgKg0KICAgICAgICAgICogQHJldHVy biB0aGUgaWQNCiAgICAgICAgICAqLw0KICAgICAgICAgcHVibGljIFN0cmluZyBnZXRTb3VyY2VG aWdOb2RlSWQoKSB7DQpAQCAtNjEzLDcgKzYxOCw3IEBADQogDQogICAgICAgICAvKioNCiAgICAg ICAgICAqIEdldCB0aGUgaWQgb2YgdGhlIHNvdXJjZSBwb3J0DQotICAgICAgICAgKiANCisgICAg ICAgICAqDQogICAgICAgICAgKiBAcmV0dXJuIHRoZSBpZA0KICAgICAgICAgICovDQogICAgICAg ICBwdWJsaWMgU3RyaW5nIGdldFNvdXJjZVBvcnRGaWdJZCgpIHsNCkBAIC02MzEsNyArNjM2LDcg QEANCiAgICAgICogPHA+DQogICAgICAqIElmIHdlIGZhaWwgdG8gZmluZCBhbnkgb2YgdGhlIGNv bnN0cnVjdG9ycyB0aGF0IHdlIGtub3cgYWJvdXQsIHdlJ2xsIGNhbGwNCiAgICAgICogR0VGJ3Mg dmVyc2lvbiBvZiB0aGlzIG1ldGhvZCB0byBzZWUgaWYgaXQgY2FuIGZpbmQgYSBjb25zdHJ1Y3Rv ci4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBjbGFzc05hbWUgZnVsbHkgcXVh bGlmaWVkIG5hbWUgb2YgY2xhc3MgdG8gaW5zdGFudGlhdGUNCiAgICAgICogQHBhcmFtIGhyZWYg c3RyaW5nIHJlcHJlc2VudGluZyBVVUlEIG9mIG93bmluZyBlbGVtZW50DQogICAgICAqIEBwYXJh bSBib3VuZHMgcG9zaXRpb24gYW5kIHNpemUgb2YgZmlndXJlDQpAQCAtNjQ1LDcgKzY1MCw3IEBA DQogICAgICAgICAgICAgZmluYWwgUmVjdGFuZ2xlIGJvdW5kcywgZmluYWwgQXR0cmlidXRlcyBh dHRyaWJ1dGVzKQ0KICAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7DQogDQotICAgICAgICBm aW5hbCBEaWFncmFtU2V0dGluZ3Mgb2xkU2V0dGluZ3MgPSANCisgICAgICAgIGZpbmFsIERpYWdy YW1TZXR0aW5ncyBvbGRTZXR0aW5ncyA9DQogICAgICAgICAgICAgKChBcmdvRGlhZ3JhbSkgZ2V0 RGlhZ3JhbSgpKS5nZXREaWFncmFtU2V0dGluZ3MoKTsNCiANCiAgICAgICAgIEZpZyBmID0gbnVs bDsNCkBAIC03NTEsNyArNzU2LDggQEANCiANCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dHJ1Y3Rvci5zZXRBY2Nlc3NpYmxlKHRydWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgIGYg PSAoRmlnKSBjb25zdHJ1Y3Rvci5uZXdJbnN0YW5jZShwYXJhbWV0ZXJzKTsNCi0gICAgICAgICAg ICAgICAgICAgICAgICBMT0cud2FybigiRmlnIGNyZWF0ZWQgYnkgb2xkIHN0eWxlIGNvbnN0cnVj dG9yICINCisgICAgICAgICAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLldBUk5JTkcsDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlnIGNyZWF0ZWQgYnkgb2xkIHN0eWxl IGNvbnN0cnVjdG9yICINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZi5nZXRD bGFzcygpLmdldE5hbWUoKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAg ICAgICAgICAgICAgICAgICB9DQpAQCAtNzcwLDcgKzc3Niw4IEBADQogICAgICAgICAvLyBGYWxs IGJhY2sgdG8gR0VGJ3MgaGFuZGxpbmcgaWYgd2UgY291bGRuJ3QgZmluZCBhbiBhcHByb3ByaWF0 ZQ0KICAgICAgICAgLy8gY29uc3RydWN0b3INCiAgICAgICAgIGlmIChmID09IG51bGwpIHsNCi0g ICAgICAgICAgICBMT0cud2FybigiTm8gQXJnb1VNTCBjb25zdHJ1Y3RvciBmb3VuZCBmb3IgIiAr IGNsYXNzTmFtZQ0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuV0FSTklORywNCisgICAgICAg ICAgICAgICAgICAgICJObyBBcmdvVU1MIGNvbnN0cnVjdG9yIGZvdW5kIGZvciAiICsgY2xhc3NO YW1lDQogICAgICAgICAgICAgICAgICAgICArICIgZmFsbGluZyBiYWNrIHRvIEdFRidzIGRlZmF1 bHQgY29uc3RydWN0b3JzIik7DQogICAgICAgICAgICAgZiA9IHN1cGVyLmNvbnN0cnVjdEZpZyhj bGFzc05hbWUsIGhyZWYsIGJvdW5kcywgYXR0cmlidXRlcyk7DQogICAgICAgICB9DQpAQCAtNzgx LDIwICs3ODgsMjIgQEANCiAgICAgLyoqDQogICAgICAqIEdpdmVuIHRoZSBocmVmIGV4dHJhY3Rl ZCBmcm9tIHRoZSBQR01MIHJldHVybiB0aGUgbW9kZWwgZWxlbWVudCB3aXRoIHRoYXQNCiAgICAg ICogdXVpZC4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBjbGFzc05hbWUgVXNl ZCBvbmx5IGZvciBsb2dnaW5nIHNob3VsZCB0aGUgaHJlZiBub3QgYmUgZm91bmQNCiAgICAgICog QHBhcmFtIGhyZWYgVGhlIGhyZWYNCiAgICAgICogQHJldHVybg0KICAgICAgKi8NCiAgICAgcHJp dmF0ZSBPYmplY3QgZ2V0T3duZXIoU3RyaW5nIGNsYXNzTmFtZSwgU3RyaW5nIGlkKSB7DQogICAg ICAgICBpZiAoaWQgPT0gbnVsbCkgew0KLSAgICAgICAgICAgIExPRy53YXJuKCJUaGVyZSBpcyBu byBocmVmIGF0dHJpYnV0ZSBwcm92aWRlZCBmb3IgYSAiICsgY2xhc3NOYW1lDQorICAgICAgICAg ICAgTE9HLmxvZyhMZXZlbC5XQVJOSU5HLA0KKyAgICAgICAgICAgICAgICAgICAgIlRoZXJlIGlz IG5vIGhyZWYgYXR0cmlidXRlIHByb3ZpZGVkIGZvciBhICIgKyBjbGFzc05hbWUNCiAgICAgICAg ICAgICAgICAgICAgICsgIiBzbyB0aGUgZGlhZ3JhbSBlbGVtZW50IGlzIGlnbm9yZWQgb24gbG9h ZCIpOw0KICAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICAgfQ0KICAgICAgICAgZmlu YWwgT2JqZWN0IG93bmVyID0gZmluZE93bmVyKGlkKTsNCiAgICAgICAgIGlmIChvd25lciA9PSBu dWxsKSB7DQotICAgICAgICAgICAgTE9HLndhcm4oIlRoZSBocmVmICIgKyBpZCArICIgaXMgbm90 IGZvdW5kIGZvciBhICIgKyBjbGFzc05hbWUNCisgICAgICAgICAgICBMT0cubG9nKExldmVsLldB Uk5JTkcsDQorICAgICAgICAgICAgICAgICAgICAiVGhlIGhyZWYgIiArIGlkICsgIiBpcyBub3Qg Zm91bmQgZm9yIGEgIiArIGNsYXNzTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgKyAiIHNvIHRo ZSBkaWFncmFtIGVsZW1lbnQgaXMgaWdub3JlZCBvbiBsb2FkIik7DQogICAgICAgICAgICAgcmV0 dXJuIG51bGw7DQogICAgICAgICB9DQpAQCAtODE4LDcgKzgyNyw3IEBADQogICAgICAqIDxsaT5k aWFncmFtLnNldFNob3dTaW5nbGVNdWx0aXBsaWNpdHkoKSAoPyF3aHkgZG9lcyBHRUYgY2FyZSBh Ym91dA0KICAgICAgKiBtdWx0aXBsaWNpdHk/ISkNCiAgICAgICogPC91bD4NCi0gICAgICogDQor ICAgICAqDQogICAgICAqIEBwYXJhbSBkaWFncmFtIHRoZSBuZXcgZGlhZ3JhbQ0KICAgICAgKiBA c2VlIG9yZy50aWdyaXMuZ2VmLnBlcnNpc3RlbmNlLnBnbWwuUEdNTFN0YWNrUGFyc2VyI3NldERp YWdyYW0ob3JnLnRpZ3Jpcy5nZWYuYmFzZS5EaWFncmFtKQ0KICAgICAgKi8NCg0KTW9kaWZpZWQ6 IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcGVyc2lzdGVuY2UvUHJpdmF0 ZUhhbmRsZXIuamF2YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93 c2UvYXJnb3VtbC90cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3BlcnNpc3Rl bmNlL1ByaXZhdGVIYW5kbGVyLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYm cjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFw cC9zcmMvb3JnL2FyZ291bWwvcGVyc2lzdGVuY2UvUHJpdmF0ZUhhbmRsZXIuamF2YQkob3JpZ2lu YWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0ZW5j ZS9Qcml2YXRlSGFuZGxlci5qYXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiAr MSw2IEBADQogLyogJElkJA0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAo YykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkt MjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBU aGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUg YXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2 MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFp bGFibGUgYXQNCkBAIC0zNSwxMSArMzUsMTMgQEANCiAvLyBQUk9WSURFRCBIRVJFVU5ERVIgSVMg T04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBVTklWRVJTSVRZIE9GDQogLy8gQ0FMSUZPUk5J QSBIQVMgTk8gT0JMSUdBVElPTlMgVE8gUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwNCiAv LyBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuDQorDQogcGFja2FnZSBv cmcuYXJnb3VtbC5wZXJzaXN0ZW5jZTsNCiANCiBpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2Vu aXplcjsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRp bC5sb2dnaW5nLkxvZ2dlcjsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQog aW1wb3J0IG9yZy5hcmdvdW1sLnVtbC5kaWFncmFtLnVpLlBhdGhJdGVtUGxhY2VtZW50Ow0KIGlt cG9ydCBvcmcuYXJnb3VtbC51dGlsLklJdGVtVUlEOw0KIGltcG9ydCBvcmcuYXJnb3VtbC51dGls Lkl0ZW1VSUQ7DQpAQCAtNjksNyArNzEsOCBAQA0KICAgICAvKioNCiAgICAgICogTG9nZ2VyLg0K ICAgICAgKi8NCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5n ZXRMb2dnZXIoUHJpdmF0ZUhhbmRsZXIuY2xhc3MpOw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5h bCBMb2dnZXIgTE9HID0NCisgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoUHJpdmF0ZUhhbmRsZXIu Y2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgLyoqDQogICAgICAqIFRoZSBjb25zdHJ1Y3Rvci4N CkBAIC04Niw3ICs4OSw3IEBADQogICAgICAqIElmIHRoZSBjb250YWluaW5nIG9iamVjdCBpcyBh IHR5cGUgZm9yIHdoaWNoIHRoZSBwcml2YXRlIGVsZW1lbnQNCiAgICAgICogbWlnaHQgY29udGFp biBhbiBJdGVtVUlELCBleHRyYWN0IHRoZSBJdGVtVUlEIGlmIGl0IGV4aXN0cyBhbmQgYXNzaWdu IGl0DQogICAgICAqIHRvIHRoZSBvYmplY3QuDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBA cGFyYW0gY29udGVudHMNCiAgICAgICogQGV4Y2VwdGlvbiBTQVhFeGNlcHRpb24NCiAgICAgICov DQpAQCAtMTI4LDE5ICsxMzEsMTkgQEANCiAgICAgICAgIC8vIEhhbmRsZSBvdGhlciB1c2VzIG9m IDxwcml2YXRlPiBjb250ZW50cw0KICAgICAgICAgc3VwZXIuZ290RWxlbWVudChjb250ZW50cyk7 DQogICAgIH0NCi0gICAgDQorDQogICAgIC8qKg0KICAgICAgKiBQcm9jZXNzIHN0YXJ0aW5nIGVs ZW1lbnRzIHdpdGhpbiB0aGUgcHJpdmF0ZSB0YWcuDQogICAgICAqIFRoaXMgbWV0aG9kIGhhbmRs ZXMgYWxsIGF0dHJpYnV0ZXMgd2l0aGluIHRhZ3Mgd2l0aGluIHByaXZhdGUgbWV0aG9kcy4NCiAg ICAgICogVGhlIG9ubHkgc3BlY2lmaWMgdGFncyB3ZSBoYW5kbGUgaGVyZSBhdCB0aGUgbW9tZW50 IGFyZSBwYXRoaXRlbXMuDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBUaGUgc3RyYXRlZ3kg Zm9yIGhhbmRsaW5nIHBhdGhpdGVtcyBpcyBhcyBmb2xsb3dzOg0KICAgICAgKiA8dWw+DQotICAg ICAqICA8bGk+RGF0YSBpcyBzYXZlZCBmb3IgZWFjaCBwYXRoIGl0ZW0gdXNpbmcgb25lIDxhcmdv dW1sOnBhdGhpdGVtIC4uLiAvPiANCisgICAgICogIDxsaT5EYXRhIGlzIHNhdmVkIGZvciBlYWNo IHBhdGggaXRlbSB1c2luZyBvbmUgPGFyZ291bWw6cGF0aGl0ZW0gLi4uIC8+DQogICAgICAqICAg ICAgdGFnIHBlciBwYXRoIGl0ZW0uDQotICAgICAqICA8bGk+VGhlIGNvZGUgdGhhdCBkZWZpbmVz IHdoYXQgaXMgc3RvcmVkIGlzIGluIA0KKyAgICAgKiAgPGxpPlRoZSBjb2RlIHRoYXQgZGVmaW5l cyB3aGF0IGlzIHN0b3JlZCBpcyBpbg0KICAgICAgKiAgICAgIG9yZy5hcmdvdW1sLnBlcnNpc3Rl bmNlLlBHTUwudGVlDQotICAgICAqICA8bGk+RWFjaCA8YXJnb3VtbDpwYXRoaXRlbT4gdGFnIHN0 b3JlcyANCisgICAgICogIDxsaT5FYWNoIDxhcmdvdW1sOnBhdGhpdGVtPiB0YWcgc3RvcmVzDQog ICAgICAqICA8dWw+DQogICAgICAqICAgIDxsaT5UaGUgY2xhc3MgbmFtZSBvZiB0aGUgUGF0aEl0 ZW1QbGFjZW1lbnRTdHJhdGVneQ0KICAgICAgKiAgICA8bGk+VGhlIGNsYXNzIG5hbWUgb2YgdGhl IGZpZyB3aGljaCBpdCBwbGFjZXMuDQpAQCAtMTU0LDEwICsxNTcsMTAgQEANCiAgICAgICogICAg ICBkaWFncmFtIGZpZ3Mgd2hpY2ggdGhleSBjb250cm9sLg0KICAgICAgKiAgPGxpPlRoZSBtYXRj aGluZyBkdXJpbmcgZmlsZSBsb2FkIGRlcGVuZHMgZW50aXJlbHkgb24NCiAgICAgICogICAgICB0 aGVyZSBiZWluZyBhIHVuaXF1ZSBmaWdjbGFzc25hbWUgYW5kIG93bmVyaHJlZiBjb21iaW5hdGlv bg0KLSAgICAgKiAgICAgIGZvciBlYWNoIHBhdGhpdGVtIG9uIHRoZSBkaWFncmFtLiAgRm9yIGV4 YW1wbGUsIEZvciBhIA0KKyAgICAgKiAgICAgIGZvciBlYWNoIHBhdGhpdGVtIG9uIHRoZSBkaWFn cmFtLiAgRm9yIGV4YW1wbGUsIEZvciBhDQogICAgICAqICAgICAgRmlnQXNzb2NpYXRpb24sIHRo ZSBtYWluIGxhYmVsIGlzIGEgRmlnVGV4dEdyb3VwLCBhbmQgaXQncw0KICAgICAgKiAgICAgIG93 bmVyIGlzIGFzc2lnbmVkIHRvIHRoZSBBc3NvY2lhdGlvbi4gIFRoaXMgY29tYmluYXRpb24gaXMN Ci0gICAgICogICAgICB1bmlxdWUsIGFuZCBpcyB1c2VkIHRvIG1hdGNoIHRoZSBwYXJzZWQgcGF0 aGl0ZW0gZGF0YSBiYWNrIA0KKyAgICAgKiAgICAgIHVuaXF1ZSwgYW5kIGlzIHVzZWQgdG8gbWF0 Y2ggdGhlIHBhcnNlZCBwYXRoaXRlbSBkYXRhIGJhY2sNCiAgICAgICogICAgICB0byB0aGUgaW5z dGFudGlhdGVkIFBhdGhJdGVtUGxhY2VtZW50Lg0KICAgICAgKiAgICAgIEFub3RoZXIgZXhhbXBs ZSBpcyB0aGUgc291cmNlIG11bHRpcGxpY2l0eSwgd2hpY2ggaXMgYQ0KICAgICAgKiAgICAgIEZp Z011bHRpcGxpY2l0eSwgYW5kIGl0J3Mgb3duZXIgaXMgYXNzaWduZWQgdG8gdGhlDQpAQCAtMTY1 LDcgKzE2OCw3IEBADQogICAgICAqICAgICAgSW4gZWFjaCBjYXNlLCB0aGUgY29tYmluYXRpb24g aXMgdW5pcXVlLCBzbyB0aGVyZSBpcyBvbmx5DQogICAgICAqICAgICAgb25lIHBhdGhpdGVtIHRo YXQgbWF0Y2hlcyB3aGVuIHJlYnVpbGRpbmcgdGhlIGRpYWdyYW0uDQogICAgICAqICA8L3VsPg0K LSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIHVyaQ0KICAgICAgKiBAcGFyYW0gbG9j YWxuYW1lDQogICAgICAqIEBwYXJhbSBxbmFtZQ0KQEAgLTE3OCw3ICsxODEsNyBAQA0KICAgICAg ICAgaWYgKCJhcmdvdW1sOnBhdGhpdGVtIi5lcXVhbHMocW5hbWUpDQogICAgICAgICAgICAgICAg ICYmIGNvbnRhaW5lciBpbnN0YW5jZW9mIEZpZ0VkZ2VIYW5kbGVyKSB7DQogICAgICAgICAgICAg U3RyaW5nIGNsYXNzbmFtZSA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoImNsYXNzbmFtZSIpOw0KLSAg ICAgICAgICAgIFN0cmluZyBmaWdjbGFzc25hbWUgPSANCisgICAgICAgICAgICBTdHJpbmcgZmln Y2xhc3NuYW1lID0NCiAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5nZXRWYWx1ZSgiZmlnY2xh c3NuYW1lIik7DQogICAgICAgICAgICAgU3RyaW5nIG93bmVyaHJlZiA9IGF0dHJpYnV0ZXMuZ2V0 VmFsdWUoIm93bmVyaHJlZiIpOw0KICAgICAgICAgICAgIFN0cmluZyBhbmdsZSA9IGF0dHJpYnV0 ZXMuZ2V0VmFsdWUoImFuZ2xlIik7DQpAQCAtMTkwLDQwICsxOTMsNDEgQEANCiAgICAgICAgICAg ICAgICAgICAgICYmIG9mZnNldCAhPSBudWxsICkgew0KICAgICAgICAgICAgICAgICAvLyBNZXRo b2QgMjogKGFzc2lnbiBkYXRhIGltbWVkaWF0ZWx5LCBzZWUgZW5kIG9mIGZpbGUpLg0KICAgICAg ICAgICAgICAgICAvLyBUT0RPOiBpZiB3ZSBldmVyIHdhbnQgdG8gZXh0ZW5kIFBhdGhJdGVtUGxh Y2VtZW50LA0KLSAgICAgICAgICAgICAgICAvLyB3ZSBzaG91bGQgbW9kaWZ5IHRoaXMsIHNvIHRo YXQgd2UgYWxzbyByZWNvZ25pc2UgYW55IA0KKyAgICAgICAgICAgICAgICAvLyB3ZSBzaG91bGQg bW9kaWZ5IHRoaXMsIHNvIHRoYXQgd2UgYWxzbyByZWNvZ25pc2UgYW55DQogICAgICAgICAgICAg ICAgIC8vIHN1YmNsYXNzIG9mIFBhdGhJdGVtUGxhY2VtZW50Lg0KICAgICAgICAgICAgICAgICAv LyBJcyB0aGUgY2xhc3MgbmFtZSBhIFBhdGhJdGVtUGxhY21lbnQ/DQogICAgICAgICAgICAgICAg IC8vIFRPRE86IFVzZSBjbGFzcyByZWZlcmVuY2UgdG8gbWFrZSB0aGlzIGRlcGVuZGVuY3kgb2J2 aW91cw0KICAgICAgICAgICAgICAgICBpZiAoIm9yZy5hcmdvdW1sLnVtbC5kaWFncmFtLnVpLlBh dGhJdGVtUGxhY2VtZW50Ii5lcXVhbHMoDQogICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nu YW1lKSkgew0KLSAgICAgICAgICAgICAgICAgICAgUGF0aEl0ZW1QbGFjZW1lbnRTdHJhdGVneSBw aXBzIA0KKyAgICAgICAgICAgICAgICAgICAgUGF0aEl0ZW1QbGFjZW1lbnRTdHJhdGVneSBwaXBz DQogICAgICAgICAgICAgICAgICAgICAgICAgPSBnZXRQaXBzKGZpZ2NsYXNzbmFtZSwgb3duZXJo cmVmKTsNCi0gICAgICAgICAgICAgICAgICAgIC8vIFNhbml0eSBjaGVjayAtIHRoZSByZXR1cm5l ZCBwYXRoIGl0ZW0gcGxhY2VtZW50IA0KKyAgICAgICAgICAgICAgICAgICAgLy8gU2FuaXR5IGNo ZWNrIC0gdGhlIHJldHVybmVkIHBhdGggaXRlbSBwbGFjZW1lbnQNCiAgICAgICAgICAgICAgICAg ICAgIC8vIHN0cmF0ZWd5IHNob3VsZCBtYXRjaCB0aGUgb25lIGluIHRoZSBVTUwuDQotICAgICAg ICAgICAgICAgICAgICAvLyBJZiBpdCBkb2Vzbid0LCBpdCBjb3VsZCBiZSB0aGF0IHRoZSBVTUwg d2FzIA0KKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXQgZG9lc24ndCwgaXQgY291bGQgYmUg dGhhdCB0aGUgVU1MIHdhcw0KICAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlZCB3aXRoIGFu IG9sZGVyIGFyZ28gdmVyc2lvbiwgYW5kIHRoZSBuZXcNCiAgICAgICAgICAgICAgICAgICAgIC8v IGFyZ28gdmVyc2lvbiB1c2UgYSBkaWZmZXJlbnQgcGxhY2VtZW50IHN0cmF0ZWd5Lg0KICAgICAg ICAgICAgICAgICAgICAgLy8gSWYgdGhleSBkb24ndCBtYXRjaCwganVzdCB1c2UgdGhlIGRlZmF1 bHQuDQotICAgICAgICAgICAgICAgICAgICBpZiAocGlwcyAhPSBudWxsIA0KKyAgICAgICAgICAg ICAgICAgICAgaWYgKHBpcHMgIT0gbnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm JiBjbGFzc25hbWUuZXF1YWxzKHBpcHMuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpKSB7DQotICAgICAg ICAgICAgICAgICAgICAgICAgLy8gTm93IHdlJ3JlIGludG8gcHJvY2Vzc2luZyBlYWNoIHNwZWNp ZmljIHBhdGggDQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm93IHdlJ3JlIGludG8gcHJv Y2Vzc2luZyBlYWNoIHNwZWNpZmljIHBhdGgNCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBp dGVtIHN0cmF0ZWd5Lg0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoZSBtb21lbnQs IHdlIG9ubHkga25vdyBQYXRoSXRlbVBsYWNlbWVudA0KICAgICAgICAgICAgICAgICAgICAgICAg IGlmIChwaXBzIGluc3RhbmNlb2YgUGF0aEl0ZW1QbGFjZW1lbnQpIHsNCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgUGF0aEl0ZW1QbGFjZW1lbnQgcGlwID0gDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBhdGhJdGVtUGxhY2VtZW50IHBpcCA9DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoUGF0aEl0ZW1QbGFjZW1lbnQpIHBpcHM7DQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBpcC5zZXREaXNwbGFjZW1lbnRWZWN0b3IoDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRG91YmxlLnBhcnNlRG91YmxlKGFuZ2xlKSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnBhcnNlSW50KG9mZnNldCkpOw0K ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBD b250aW51ZSAoZnV0dXJlIFBhdGhJdGVtUGxhY2VtZW50U3RyYXRlZ3kgaW1wbCkgDQorICAgICAg ICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgKGZ1dHVyZSBQYXRoSXRlbVBsYWNlbWVudFN0 cmF0ZWd5IGltcGwpDQogICAgICAgICAgICAgICAgICAgICAgICAgLy9lbHNlIGlmICguLi4pIHsN CiAgICAgICAgICAgICAgICAgICAgICAgICAvL30NCiAgICAgICAgICAgICAgICAgICAgIH0NCiAg ICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBQYXRoSXRlbVBsYWNlbWVudCB3YXMgdW5rbm93 biwgbGVhdmUgdGhlDQogICAgICAgICAgICAgICAgICAgICAvLyBkaWFncmFtIHdpdGggdGhlIGRl ZmF1bHQgc2V0dGluZ3MuDQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsNCi0gICAgICAgICAg ICAgICAgICAgICAgICBMT0cud2FybigiUEdNTCBzdG9yZWQgcGF0aGl0ZW0gY2xhc3MgbmFtZSBk b2VzICINCisgICAgICAgICAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLldBUk5JTkcsDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEdNTCBzdG9yZWQgcGF0aGl0ZW0gY2xh c3MgbmFtZSBkb2VzICINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIm5vdCBt YXRjaCB0aGUgY2xhc3MgbmFtZSBvbiB0aGUgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKyAiZGlhZ3JhbS4gTGFiZWwgcG9zaXRpb24gd2lsbCByZXZlcnQgIg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKyAidG8gZGVmYXVsdHMuIik7DQpAQCAtMjMyLDkgKzIz Niw5IEBADQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIC8vIElmIGFueSBvZiB0aGUgdmFs dWVzIGFyZSBudWxsLCBpZ25vcmUgdGhlIGVsZW1lbnQuDQogICAgICAgICAgICAgZWxzZSB7DQot ICAgICAgICAgICAgICAgIExPRy53YXJuKCJDb3VsZCBub3QgZmluZCBhbGwgYXR0cmlidXRlcyBm b3IgPCIgDQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuV0FSTklORywgIkNvdWxkIG5v dCBmaW5kIGFsbCBhdHRyaWJ1dGVzIGZvciA8Ig0KICAgICAgICAgICAgICAgICAgICAgICAgICsg cW5hbWUgKyAiPiB0YWcsIGlnbm9yaW5nLiIpOw0KLSAgICAgICAgICAgICAgICAvL1N5c3RlbS5v dXQucHJpbnRsbigiRXJyb3IgLSBvbmUgb2YgdGhlc2UgaXMgbnVsbDoiIA0KKyAgICAgICAgICAg ICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgLSBvbmUgb2YgdGhlc2UgaXMgbnVsbDoi DQogICAgICAgICAgICAgICAgIC8vICAgICAgICArICJjbGFzc25hbWU9IiArIGNsYXNzbmFtZQ0K ICAgICAgICAgICAgICAgICAvLyAgICAgICAgKyAiIGZpZ2NsYXNzbmFtZT0iICsgZmlnY2xhc3Nu YW1lDQogICAgICAgICAgICAgICAgIC8vICAgICAgICArICIgb3duZXJocmVmPSIgKyBvd25lcmhy ZWYNCkBAIC0yNTIsNyArMjU2LDcgQEANCiAgICAgICogQHBhcmFtIG93bmVyaHJlZiBUaGUgaHJl ZiBvZiB0aGUgb3duZXIgb2YgdGhlIGZpZyBiZWluZyBwbGFjZWQuDQogICAgICAqIEByZXR1cm4g VGhlIHBhdGggaXRlbSBwbGFjZW1lbnQgc3RyYXRlZ3kuDQogICAgICAqLw0KLSAgICBwcml2YXRl IFBhdGhJdGVtUGxhY2VtZW50U3RyYXRlZ3kgZ2V0UGlwcyhTdHJpbmcgZmlnY2xhc3NuYW1lLCAN CisgICAgcHJpdmF0ZSBQYXRoSXRlbVBsYWNlbWVudFN0cmF0ZWd5IGdldFBpcHMoU3RyaW5nIGZp Z2NsYXNzbmFtZSwNCiAgICAgICAgICAgICBTdHJpbmcgb3duZXJocmVmKSB7DQogICAgICAgICBp ZiAoY29udGFpbmVyIGluc3RhbmNlb2YgRmlnRWRnZUhhbmRsZXIpIHsNCiAgICAgICAgICAgICBG aWdFZGdlIGZlID0gKChGaWdFZGdlSGFuZGxlcikgY29udGFpbmVyKS5nZXRGaWdFZGdlKCk7DQpA QCAtMjYwLDcgKzI2NCw3IEBADQogDQogICAgICAgICAgICAgZm9yIChPYmplY3QgbyA6IGZlLmdl dFBhdGhJdGVtRmlncygpKSB7DQogICAgICAgICAgICAgICAgIEZpZyBmID0gKEZpZykgbzsNCi0g ICAgICAgICAgICAgICAgLy8gRm9yIGEgbWF0Y2ggdG8gYmUgZm91bmQsIGl0IGhhcyB0byBoYXZl IHRoZSBzYW1lIA0KKyAgICAgICAgICAgICAgICAvLyBGb3IgYSBtYXRjaCB0byBiZSBmb3VuZCwg aXQgaGFzIHRvIGhhdmUgdGhlIHNhbWUNCiAgICAgICAgICAgICAgICAgLy8gb3duZXIsIGFuZCB0 aGUgc2FtZSBsb25nIGNsYXNzIG5hbWUuDQogICAgICAgICAgICAgICAgIGlmIChvd25lci5lcXVh bHMoZi5nZXRPd25lcigpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICYmIGZpZ2NsYXNzbmFt ZS5lcXVhbHMoZi5nZXRDbGFzcygpLmdldE5hbWUoKSkpIHsNCkBAIC0yNjksMTEgKzI3MywxMiBA QA0KICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KLSAgICAg ICAgTE9HLndhcm4oIkNvdWxkIG5vdCBsb2FkIHBhdGggaXRlbSBmb3IgZmlnICciICsgZmlnY2xh c3NuYW1lIA0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5XQVJOSU5HLA0KKyAgICAgICAgICAgICAg ICAiQ291bGQgbm90IGxvYWQgcGF0aCBpdGVtIGZvciBmaWcgJyIgKyBmaWdjbGFzc25hbWUNCiAg ICAgICAgICAgICAgICAgKyAiJywgdXNpbmcgZGVmYXVsdCBwbGFjZW1lbnQuIik7DQogICAgICAg ICByZXR1cm4gbnVsbDsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIERldGVy bWluZSBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGFuIEl0ZW1VSUQuDQogICAgICAqDQpAQCAtMjg3 LDggKzI5Miw4IEBADQogICAgICAgICAgICAgTmFtZVZhbCBudmFsID0gc3BsaXROYW1lVmFsKHN0 cik7DQogDQogICAgICAgICAgICAgaWYgKG52YWwgIT0gbnVsbCkgew0KLSAgICAgICAgICAgICAg ICBpZiAoTE9HLmlzRGVidWdFbmFibGVkKCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIExPRy5k ZWJ1ZygiUHJpdmF0ZSBFbGVtZW50OiBcIiIgKyBudmFsLmdldE5hbWUoKQ0KKyAgICAgICAgICAg ICAgICBpZiAoTE9HLmlzTG9nZ2FibGUoTGV2ZWwuRklORSkpIHsNCisgICAgICAgICAgICAgICAg ICAgIExPRy5sb2coTGV2ZWwuRklORSwgIlByaXZhdGUgRWxlbWVudDogXCIiICsgbnZhbC5nZXRO YW1lKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJcIiBcIiIgKyBudmFsLmdl dFZhbHVlKCkgKyAiXCIiKTsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICBp ZiAoIkl0ZW1VSUQiLmVxdWFscyhudmFsLmdldE5hbWUoKSkNCkBAIC0zNjQsMjEgKzM2OSwyMSBA QA0KICAgICB9DQogfQ0KIA0KLS8vIEFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIG9mIHRo ZSBwYXJzaW5nIG9mIHBhdGhpdGVtcyBpcyB0byBjb2xsZWN0IA0KKy8vIEFuIGFsdGVybmF0aXZl IGltcGxlbWVudGF0aW9uIG9mIHRoZSBwYXJzaW5nIG9mIHBhdGhpdGVtcyBpcyB0byBjb2xsZWN0 DQogLy8gZXZlcnl0aGluZyBhdCB0aGUgc3RhcnQsIHRoZW4gaXRlcmF0ZSB0aHJvdWdoIGl0IGFs bCBhdCB0aGUgZW5kLg0KIC8vIFRoZSBjb2RlIGJlbG93IGRvZXMgdGhpcyAtIGl0IHdvcmtzLCBi dXQgaXQgaXMgY3VycmVudGx5IG5vdCB1c2VkLA0KIC8vIHNpbmNlIGl0IGlzIGEgdW5uZWNlc3Nh cmlseSBjb21wbGljYXRlZC4NCiAvLyBUaGVyZSBhcmUgcHJvYmFibHkgYmV0dGVyIHdheXMgdG8g aW1wbGVtZW50IHRoaXMgdGhhbiB1c2luZyBhbg0KIC8vIEFycmF5TGlzdCBvZiBIYXNodGFibGVz Lg0KLS8vIHNlZSBvcHRpb24gMSBpbiANCisvLyBzZWUgb3B0aW9uIDEgaW4NCiAvLyBodHRwOi8v YXJnb3VtbC50aWdyaXMub3JnL2lzc3Vlcy9zaG93X2J1Zy5jZ2k/aWQ9MTA0OCNkZXNjNjYNCiAv Lw0KIA0KIC8vLyoqDQogLy8gKiBBIGxpc3Qgb2YgdGhlIHBhdGggaXRlbSBhdHRyaWJ1dGVzIGZv ciB0aGlzIGNvbnRhaW5lci4NCi0vLyAqIFRoZSBsaXN0IGlzIHBvcHVsYXRlZCBkdXJpbmcgcGFy c2luZywgdGhlbSBwcm9jZXNzZWQgYXQgZW5kRWxlbWVudCgpIA0KKy8vICogVGhlIGxpc3QgaXMg cG9wdWxhdGVkIGR1cmluZyBwYXJzaW5nLCB0aGVtIHByb2Nlc3NlZCBhdCBlbmRFbGVtZW50KCkN CiAvLyAqLw0KLS8vcHJpdmF0ZSBMaXN0PEhhc2h0YWJsZTxTdHJpbmcsIFN0cmluZz4+IHBhdGhJ dGVtQXR0cnMgPSANCisvL3ByaXZhdGUgTGlzdDxIYXNodGFibGU8U3RyaW5nLCBTdHJpbmc+PiBw YXRoSXRlbUF0dHJzID0NCiAvLyAgICBuZXcgQXJyYXlMaXN0PEhhc2h0YWJsZTxTdHJpbmcsIFN0 cmluZz4+KCk7DQogDQogLy8gVGhpcyBjb2RlIGhhcyB0byBnbyB3aXRoaW4gdGhlIHN0YXJ0RWxl bWVudCBibG9jayBhZnRlciB0aGUgc3RyaW5ncw0KQEAgLTM4Niw4ICszOTEsOCBAQA0KIA0KIC8v Ly8gTWV0aG9kIDE6DQogLy8vLyAoY29sbGVjdCBkYXRhIGFuZCBhc3NpZ24gbGF0ZXIgaW4gZW5k RWxlbWVudCgpIG1ldGhvZCkuDQotLy9IYXNodGFibGU8U3RyaW5nLCBTdHJpbmc+IGh0ID0gDQot Ly8gICAgbmV3IEhhc2h0YWJsZTxTdHJpbmcsIFN0cmluZz4oKTsgDQorLy9IYXNodGFibGU8U3Ry aW5nLCBTdHJpbmc+IGh0ID0NCisvLyAgICBuZXcgSGFzaHRhYmxlPFN0cmluZywgU3RyaW5nPigp Ow0KIC8vaHQucHV0KCJjbGFzc25hbWUiLCBjbGFzc25hbWUpOw0KIC8vaHQucHV0KCJmaWdjbGFz c25hbWUiLCBmaWdjbGFzc25hbWUpOw0KIC8vaHQucHV0KCJvd25lcmhyZWYiLCBvd25lcmhyZWYp Ow0KQEAgLTM5NywxMCArNDAyLDEwIEBADQogDQogLy9wdWJsaWMgdm9pZCBlbmRFbGVtZW50KFN0 cmluZyB1cmksIFN0cmluZyBsb2NhbG5hbWUsIFN0cmluZyBxbmFtZSkNCiAvL3Rocm93cyBTQVhF eGNlcHRpb24gew0KLS8vLy9TeXN0ZW0ub3V0LnByaW50KCJHb3QgZW5kRWxlbWVudDogIiANCi0v Ly8vICAgICAgICArICJ1cmk9JyIgKyB1cmkgKyAiJ1xuIiANCi0vLy8vICAgICAgICArICJsb2Nh bG5hbWU9JyIgKyBsb2NhbG5hbWUgKyAiJ1xuIiANCi0vLy8vICAgICAgICArICJxbmFtZT0nIiAr IHFuYW1lICsgIidcbiIgDQorLy8vL1N5c3RlbS5vdXQucHJpbnQoIkdvdCBlbmRFbGVtZW50OiAi DQorLy8vLyAgICAgICAgKyAidXJpPSciICsgdXJpICsgIidcbiINCisvLy8vICAgICAgICArICJs b2NhbG5hbWU9JyIgKyBsb2NhbG5hbWUgKyAiJ1xuIg0KKy8vLy8gICAgICAgICsgInFuYW1lPSci ICsgcW5hbWUgKyAiJ1xuIg0KIC8vLy8pOw0KIC8vLy8gSWYgd2UgY29sbGVjdGVkIGFueSBwYXRo IGl0ZW1zIGZvciBhIEZpZ0VkZ2VNb2RlbEVsZW1lbnQsDQogLy8vLyBwcm9jZXNzIHRoZW0gbm93 LCBhbmQgYXNzaWduIHRoZWlyIHZhbHVlcyB0byByZWFsIEZpZ3Mgb24gdGhlIGRpYWcuDQpAQCAt NDA4LDE5ICs0MTMsMTkgQEANCiAvLyAgICBmb3IgKEhhc2h0YWJsZTxTdHJpbmcsIFN0cmluZz4g YXR0cnMgOiBwYXRoSXRlbUF0dHJzKSB7DQogLy8gICAgICAgIC8vIElzIHRoZSBjbGFzcyBuYW1l IGEgUGF0aEl0ZW1QbGFjbWVudD8NCiAvLyAgICAgICAgLy8gVE9ETzogaWYgd2UgZXZlciB3YW50 IHRvIGV4dGVuZCBQYXRoSXRlbVBsYWNlbWVudCwNCi0vLyAgICAgICAgLy8gd2Ugc2hvdWxkIG1v ZGlmeSB0aGlzLCBzbyB0aGF0IHdlIGFsc28gcmVjb2duaXNlIGFueSANCisvLyAgICAgICAgLy8g d2Ugc2hvdWxkIG1vZGlmeSB0aGlzLCBzbyB0aGF0IHdlIGFsc28gcmVjb2duaXNlIGFueQ0KIC8v ICAgICAgICAvLyBzdWJjbGFzcyBvZiBQYXRoSXRlbVBsYWNlbWVudC4NCiAvLyAgICAgICAgaWYg KCJvcmcuYXJnb3VtbC51bWwuZGlhZ3JhbS51aS5QYXRoSXRlbVBsYWNlbWVudCIuDQogLy8gICAg ICAgICAgICAgICAgZXF1YWxzKGF0dHJzLmdldCgiY2xhc3NuYW1lIikpKSB7DQogLy8gICAgICAg ICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiZmlnY2xhc3NuYW1lPSIgKyBhdHRycy5nZXQoImZp Z2NsYXNzbmFtZSIpKTsNCi0vLyAgICAgICAgICAgIA0KLS8vICAgICAgICAgICAgUGF0aEl0ZW1Q bGFjZW1lbnRTdHJhdGVneSBwaXBzIA0KLS8vICAgICAgICAgICAgICAgID0gZ2V0UGlwcyhhdHRy cy5nZXQoImZpZ2NsYXNzbmFtZSIpLCANCisvLw0KKy8vICAgICAgICAgICAgUGF0aEl0ZW1QbGFj ZW1lbnRTdHJhdGVneSBwaXBzDQorLy8gICAgICAgICAgICAgICAgPSBnZXRQaXBzKGF0dHJzLmdl dCgiZmlnY2xhc3NuYW1lIiksDQogLy8gICAgICAgICAgICAgICAgICAgICAgICBhdHRycy5nZXQo Im93bmVyaHJlZiIpKTsNCiAvLyAgICAgICAgICAgIC8vIFNhbml0eSBjaGVjayAtIHRoZSByZXR1 cm5lZCBwYXRoIGl0ZW0gcGxhY2VtZW50IHN0cmF0eQ0KIC8vICAgICAgICAgICAgLy8gc2hvdWxk IG1hdGNoIHRoZSBvbmUgaW4gdGhlIHVtbC4NCiAvLyAgICAgICAgICAgIGlmIChwaXBzLmdldENs YXNzKCkuZ2V0TmFtZSgpLmVxdWFscyhhdHRycy5nZXQoImNsYXNzbmFtZSIpKSkgew0KLS8vICAg ICAgICAgICAgICAgIC8vIE5vdyB3ZSdyZSBpbnRvIHByb2Nlc3NpbmcgZWFjaCBzcGVjaWZpYyBw YXRoIGl0ZW0gDQorLy8gICAgICAgICAgICAgICAgLy8gTm93IHdlJ3JlIGludG8gcHJvY2Vzc2lu ZyBlYWNoIHNwZWNpZmljIHBhdGggaXRlbQ0KIC8vICAgICAgICAgICAgICAgIC8vIHN0cmF0ZWd5 Lg0KIC8vICAgICAgICAgICAgICAgIC8vIEF0IHRoZSBtb21lbnQsIHdlIG9ubHkga25vdyBhYm91 dCBQYXRoSXRlbVBsYWNlbWVudA0KIC8vICAgICAgICAgICAgICAgIGlmIChwaXBzIGluc3RhbmNl b2YgUGF0aEl0ZW1QbGFjZW1lbnQpIHsNCkBAIC00MjksMjAgKzQzNCwyMCBAQA0KIC8vICAgICAg ICAgICAgICAgICAgICAgICAgICAgIERvdWJsZS5wYXJzZURvdWJsZShhdHRycy5nZXQoImFuZ2xl IikpLA0KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIucGFyc2VJbnQoYXR0 cnMuZ2V0KCJvZmZzZXQiKSkpOw0KIC8vICAgICAgICAgICAgICAgIH0NCi0vLyAgICAgICAgICAg ICAgICAvLyBDb250aW51ZSAoZnV0dXJlIFBhdGhJdGVtUGxhY2VtZW50U3RyYXRlZ3kgaW1wbCkg DQorLy8gICAgICAgICAgICAgICAgLy8gQ29udGludWUgKGZ1dHVyZSBQYXRoSXRlbVBsYWNlbWVu dFN0cmF0ZWd5IGltcGwpDQogLy8gICAgICAgICAgICAgICAgLy9lbHNlIGlmICguLi4pIHsNCi0v LyAgICAgICAgICAgICAgICAvLyAgICANCisvLyAgICAgICAgICAgICAgICAvLw0KIC8vICAgICAg ICAgICAgICAgIC8vfQ0KLS8vICAgICAgICAgICAgICAgICAgICANCisvLw0KIC8vICAgICAgICAg ICAgfQ0KIC8vICAgICAgICAgICAgZWxzZSB7DQotLy8gICAgICAgICAgICAgICAgTE9HLndhcm4o IlBHTUwgc3RvcmVkIHBhdGhpdGVtIGNsYXNzIG5hbWUgZG9lcyBub3QgIg0KKy8vICAgICAgICAg ICAgICAgIExPRy5sb2coTGV2ZWwuV0FSTklORywgIlBHTUwgc3RvcmVkIHBhdGhpdGVtIGNsYXNz IG5hbWUgZG9lcyBub3QgIg0KIC8vICAgICAgICAgICAgICAgICAgICAgICAgKyAibWF0Y2ggdGhl IGNsYXNzIG5hbWUgb24gdGhlIGRpYWdyYW0uIg0KIC8vICAgICAgICAgICAgICAgICAgICAgICAg KyAiTGFiZWwgcG9zaXRpb24gd2lsbCByZXZlcnQgdG8gZGVmYXVsdHMuIik7DQogLy8gICAgICAg ICAgICB9DQogLy8gICAgICAgIH0NCiAvLyAgICB9DQogLy99DQotLy8gICAgDQorLy8NCiAvL3N1 cGVyLmVuZEVsZW1lbnQodXJpLCBsb2NhbG5hbWUsIHFuYW1lKTsNCiAvL30NCg0KTW9kaWZpZWQ6 IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcGVyc2lzdGVuY2UvUHJvZmls ZUNvbmZpZ3VyYXRpb25GaWxlUGVyc2lzdGVyLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGln cmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9v cmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9Qcm9maWxlQ29uZmlndXJhdGlvbkZpbGVQZXJzaXN0ZXIu amF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9w ZXJzaXN0ZW5jZS9Qcm9maWxlQ29uZmlndXJhdGlvbkZpbGVQZXJzaXN0ZXIuamF2YQkob3JpZ2lu YWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0ZW5j ZS9Qcm9maWxlQ29uZmlndXJhdGlvbkZpbGVQZXJzaXN0ZXIuamF2YQkyMDEyLTEyLTMwIDA1OjA2 OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICog Q29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxs IHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVy aWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlw c2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJp YnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNTEsOCArNTEsOSBAQA0KIGltcG9ydCBq YXZhLnV0aWwuQXJyYXlMaXN0Ow0KIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCiBpbXBv cnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2lt cG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9n NGouTG9nZ2VyOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5hcHBsaWNhdGlvbi5hcGkuQXJnbzsNCiBp bXBvcnQgb3JnLmFyZ291bWwuYXBwbGljYXRpb24uaGVscGVycy5BcHBsaWNhdGlvblZlcnNpb247 DQogaW1wb3J0IG9yZy5hcmdvdW1sLmNvbmZpZ3VyYXRpb24uQ29uZmlndXJhdGlvbjsNCkBAIC03 NSw5ICs3Niw5IEBADQogICogQGF1dGhvciBtYXVyZWxpbzEyMzQNCiAgKi8NCiBwdWJsaWMgY2xh c3MgUHJvZmlsZUNvbmZpZ3VyYXRpb25GaWxlUGVyc2lzdGVyIGV4dGVuZHMgTWVtYmVyRmlsZVBl cnNpc3RlciB7DQotICAgIA0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0g DQotICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKFByb2ZpbGVDb25maWd1cmF0aW9uRmlsZVBlcnNp c3Rlci5jbGFzcyk7DQorDQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0K KyAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihQcm9maWxlQ29uZmlndXJhdGlvbkZpbGVQZXJzaXN0 ZXIuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgLyoNCiAgICAgICogQHNlZSBvcmcuYXJnb3Vt bC5wZXJzaXN0ZW5jZS5NZW1iZXJGaWxlUGVyc2lzdGVyI2dldE1haW5UYWcoKQ0KQEAgLTkwLDE0 ICs5MSwxNCBAQA0KICAgICAgICAgdGhyb3dzIE9wZW5FeGNlcHRpb24gew0KICAgICAgICAgbG9h ZChwcm9qZWN0LCBuZXcgSW5wdXRTb3VyY2UoaW5wdXRTdHJlYW0pKTsNCiAgICAgfQ0KLSAgICAN CisNCiAgICAgLyoNCiAgICAgICogQHNlZSBvcmcuYXJnb3VtbC5wZXJzaXN0ZW5jZS5NZW1iZXJG aWxlUGVyc2lzdGVyI2xvYWQob3JnLmFyZ291bWwua2VybmVsLlByb2plY3QsIGphdmEuaW8uSW5w dXRTdHJlYW0pDQogICAgICAqLw0KICAgICBwdWJsaWMgdm9pZCBsb2FkKFByb2plY3QgcHJvamVj dCwgSW5wdXRTb3VyY2UgaW5wdXRTb3VyY2UpDQogICAgICAgICB0aHJvd3MgT3BlbkV4Y2VwdGlv biB7DQogICAgICAgICB0cnkgew0KLSAgICAgICAgICAgIFByb2ZpbGVDb25maWd1cmF0aW9uUGFy c2VyIHBhcnNlciA9IA0KKyAgICAgICAgICAgIFByb2ZpbGVDb25maWd1cmF0aW9uUGFyc2VyIHBh cnNlciA9DQogICAgICAgICAgICAgICAgIG5ldyBQcm9maWxlQ29uZmlndXJhdGlvblBhcnNlcigp Ow0KICAgICAgICAgICAgIHBhcnNlci5wYXJzZShpbnB1dFNvdXJjZSk7DQogICAgICAgICAgICAg Q29sbGVjdGlvbjxQcm9maWxlPiBwcm9maWxlcyA9IHBhcnNlci5nZXRQcm9maWxlcygpOw0KQEAg LTEwNyw3ICsxMDgsNyBAQA0KICAgICAgICAgICAgICAgICBwcm9maWxlcy5hZGRBbGwobG9hZFVu cmVzb2x2ZWQodW5yZXNvbHZlZCkpOw0KICAgICAgICAgICAgIH0NCiANCi0gICAgICAgICAgICBQ cm9maWxlQ29uZmlndXJhdGlvbiBwYyA9IG5ldyBQcm9maWxlQ29uZmlndXJhdGlvbihwcm9qZWN0 LCANCisgICAgICAgICAgICBQcm9maWxlQ29uZmlndXJhdGlvbiBwYyA9IG5ldyBQcm9maWxlQ29u ZmlndXJhdGlvbihwcm9qZWN0LA0KICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZXMpOw0KICAg ICAgICAgICAgIHByb2plY3Quc2V0UHJvZmlsZUNvbmZpZ3VyYXRpb24ocGMpOw0KICAgICAgICAg fSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCkBAIC0xMjQsMTIgKzEyNSwxMiBAQA0KICAgICAgKiBw cm9maWxlIGlzbid0IGZvdW5kIGJ5IHRoZSBwcm9maWxlIG1hbmFnZXIuDQogICAgICAqIDxwPg0K ICAgICAgKiBUT0RPOiB3b3JrIGluIHByb2dyZXNzLCBzZWUgaXNzdWUgNTAzOQ0KLSAgICAgKiAN CisgICAgICoNCiAgICAgICogQHBhcmFtIHVucmVzb2x2ZWQgY29sbGVjdGlvbiBvZiB1bnJlc29s dmVkIGZpbGVuYW1lcyBmcm9tIHRoZSBwYXJzZXINCiAgICAgICogQHJldHVybiBjb2xsZWN0aW9u IG9mIHJlc29sdmVkIHByb2ZpbGVzDQogICAgICAqLw0KICAgICBwcml2YXRlIENvbGxlY3Rpb248 UHJvZmlsZT4gbG9hZFVucmVzb2x2ZWQoQ29sbGVjdGlvbjxTdHJpbmc+IHVucmVzb2x2ZWQpIHsN Ci0gICAgICAgIENvbGxlY3Rpb248UHJvZmlsZT4gcHJvZmlsZXMgPSBuZXcgQXJyYXlMaXN0PFBy b2ZpbGU+KCk7ICAgICAgICANCisgICAgICAgIENvbGxlY3Rpb248UHJvZmlsZT4gcHJvZmlsZXMg PSBuZXcgQXJyYXlMaXN0PFByb2ZpbGU+KCk7DQogICAgICAgICBQcm9maWxlTWFuYWdlciBwcm9m aWxlTWFuYWdlciA9IFByb2ZpbGVGYWNhZGUuZ2V0TWFuYWdlcigpOw0KICAgICAgICAgZm9yIChT dHJpbmcgZmlsZW5hbWUgOiB1bnJlc29sdmVkKSB7DQogICAgICAgICAgICAgLy8gVE9ETzogd29y ayBpbiBwcm9ncmVzcywgc2VlIGlzc3VlIDUwMzkNCkBAIC0xNDMsMTIgKzE0NCwxMiBAQA0KICAg ICB9DQogDQogICAgIC8qKg0KLSAgICAgKiBSZWdpc3RlciBhIHVzZXIgZGVmaW5lZCBwcm9maWxl IGluIHRoZSBwcm9maWxlTWFuYWdlciwgdXNpbmcgdGhlIGJhY2t1cCANCisgICAgICogUmVnaXN0 ZXIgYSB1c2VyIGRlZmluZWQgcHJvZmlsZSBpbiB0aGUgcHJvZmlsZU1hbmFnZXIsIHVzaW5nIHRo ZSBiYWNrdXANCiAgICAgICogWE1JIGZpbGUgZnJvbSB0aGUgcHJvamVjdCBiZWluZyBsb2FkZWQu DQogICAgICAqIDxwPg0KICAgICAgKiA8ZW0+Tk9URTo8L2VtPiBUaGlzIGhhcyB0aGUgc2lkZSBl ZmZlY3Qgb2YgcGVybWFuZW50bHkgcmVnaXN0ZXJpbmcgdGhlDQogICAgICAqIHByb2ZpbGUgd2hp Y2ggbWF5IG5vdCBiZSB3aGF0IHRoZSB1c2VyIHdhbnRzLg0KLSAgICAgKiANCisgICAgICoNCiAg ICAgICogQHBhcmFtIGZpbGVOYW1lIG5hbWUgb2Ygb3JpZ2luYWwgWE1JIGZpbGUgdGhhdCB0aGUg YXV0aG9yIG9mIHRoZSBwcm9qZWN0DQogICAgICAqICAgICAgICAgICAgICAgIHVzZWQgd2hlbiBj cmVhdGluZyB0aGUgVXNlckRlZmluZWRQcm9maWxlLg0KICAgICAgKiBAcGFyYW0geG1pIHRoZSBj b250ZW50cyBvZiB0aGUgWE1JIGZpbGUuDQpAQCAtMTYwLDEyICsxNjEsMTUgQEANCiAgICAgICAg IEZpbGUgcHJvZmlsZXNEaXJlY3RvcnkgPSBnZXRQcm9maWxlc0RpcmVjdG9yeShwcm9maWxlTWFu YWdlcik7DQogICAgICAgICBGaWxlIHByb2ZpbGVGaWxlID0gbmV3IEZpbGUocHJvZmlsZXNEaXJl Y3RvcnksIGZpbGVOYW1lKTsNCiAgICAgICAgIE91dHB1dFN0cmVhbVdyaXRlciB3cml0ZXIgPSBu ZXcgT3V0cHV0U3RyZWFtV3JpdGVyKA0KLSAgICAgICAgICAgICAgICBuZXcgRmlsZU91dHB1dFN0 cmVhbShwcm9maWxlRmlsZSksIA0KKyAgICAgICAgICAgICAgICBuZXcgRmlsZU91dHB1dFN0cmVh bShwcm9maWxlRmlsZSksDQogICAgICAgICAgICAgICAgIEFyZ28uZ2V0RW5jb2RpbmcoKSk7DQog ICAgICAgICB3cml0ZXIud3JpdGUoeG1pLnRvU3RyaW5nKCkpOw0KICAgICAgICAgd3JpdGVyLmNs b3NlKCk7DQotICAgICAgICBMT0cuaW5mbygiV3JvdGUgdXNlciBkZWZpbmVkIHByb2ZpbGUgXCIi ICsgcHJvZmlsZUZpbGUgDQotICAgICAgICAgICAgKyAiXCIsIHdpdGggc2l6ZSAiICsgeG1pLmxl bmd0aCgpICsgIi4iKTsNCisNCisgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywNCisgICAgICAg ICAgICAgICAgIldyb3RlIHVzZXIgZGVmaW5lZCBwcm9maWxlIFwiezB9XCIsIHdpdGggc2l6ZSB7 MX0uIiwNCisgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtde3Byb2ZpbGVGaWxlLCB4bWkubGVu Z3RoKCl9KTsNCisNCiAgICAgICAgIGlmIChpc1NvbWVQcm9maWxlRGlyZWN0b3J5Q29uZmlndXJl ZChwcm9maWxlTWFuYWdlcikpIHsNCiAgICAgICAgICAgICBwcm9maWxlTWFuYWdlci5yZWZyZXNo UmVnaXN0ZXJlZFByb2ZpbGVzKCk7DQogICAgICAgICB9IGVsc2Ugew0KQEAgLTE3Nyw3ICsxODEs NyBAQA0KIA0KICAgICBwcml2YXRlIHN0YXRpYyBGaWxlIGdldFByb2ZpbGVzRGlyZWN0b3J5KFBy b2ZpbGVNYW5hZ2VyIHByb2ZpbGVNYW5hZ2VyKSB7DQogICAgICAgICBpZiAoaXNTb21lUHJvZmls ZURpcmVjdG9yeUNvbmZpZ3VyZWQocHJvZmlsZU1hbmFnZXIpKSB7DQotICAgICAgICAgICAgTGlz dDxTdHJpbmc+IGRpcmVjdG9yaWVzID0gDQorICAgICAgICAgICAgTGlzdDxTdHJpbmc+IGRpcmVj dG9yaWVzID0NCiAgICAgICAgICAgICAgICAgcHJvZmlsZU1hbmFnZXIuZ2V0U2VhcmNoUGF0aERp cmVjdG9yaWVzKCk7DQogICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxlKGRpcmVjdG9yaWVzLmdl dCgwKSk7DQogICAgICAgICB9IGVsc2Ugew0KQEAgLTE5OCw3ICsyMDIsNyBAQA0KICAgICAgKi8N CiAgICAgcHVibGljIHZvaWQgc2F2ZShQcm9qZWN0TWVtYmVyIG1lbWJlciwgT3V0cHV0U3RyZWFt IHN0cmVhbSkNCiAJdGhyb3dzIFNhdmVFeGNlcHRpb24gew0KLQkNCisNCiAgICAgICAgIFByaW50 V3JpdGVyIHc7DQogICAgICAgICB0cnkgew0KICAgICAgICAgICAgIHcgPSBuZXcgUHJpbnRXcml0 ZXIobmV3IE91dHB1dFN0cmVhbVdyaXRlcihzdHJlYW0sICJVVEYtOCIpKTsNCkBAIC0yMTIsNyAr MjE2LDcgQEANCiANCiAgICAgcHJpdmF0ZSB2b2lkIHNhdmVQcm9qZWN0TWVtYmVyKFByb2plY3RN ZW1iZXIgbWVtYmVyLCBQcmludFdyaXRlciB3KQ0KIAl0aHJvd3MgU2F2ZUV4Y2VwdGlvbiB7DQot CQ0KKw0KICAgICAgICAgdHJ5IHsNCiAJICAgIGlmIChtZW1iZXIgaW5zdGFuY2VvZiBQcm9maWxl Q29uZmlndXJhdGlvbikgew0KIAkJUHJvZmlsZUNvbmZpZ3VyYXRpb24gcGMgPSAoUHJvZmlsZUNv bmZpZ3VyYXRpb24pIG1lbWJlcjsNCkBAIC0yMjcsNyArMjMxLDcgQEANCiANCiAJCWZvciAoUHJv ZmlsZSBwcm9maWxlIDogcGMuZ2V0UHJvZmlsZXMoKSkgew0KICAgICAgICAgICAgICAgICAgICAg aWYgKHByb2ZpbGUgaW5zdGFuY2VvZiBVc2VyRGVmaW5lZFByb2ZpbGUpIHsNCi0gICAgICAgICAg ICAgICAgICAgICAgICBVc2VyRGVmaW5lZFByb2ZpbGUgdXByb2ZpbGUgPSANCisgICAgICAgICAg ICAgICAgICAgICAgICBVc2VyRGVmaW5lZFByb2ZpbGUgdXByb2ZpbGUgPQ0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoVXNlckRlZmluZWRQcm9maWxlKSBwcm9maWxlOw0KICAgICAgICAg ICAgICAgICAgICAgICAgIHcucHJpbnRsbigiXHRcdDx1c2VyRGVmaW5lZD4iKTsNCiAgICAgICAg ICAgICAgICAgICAgICAgICB3LnByaW50bG4oIlx0XHRcdDxmaWxlbmFtZT4iDQpAQCAtMjU0LDkg KzI1OCw5IEBADQogCX0NCiAgICAgfQ0KIA0KLSAgICBwcml2YXRlIHZvaWQgcHJpbnRNb2RlbFhN SShQcmludFdyaXRlciB3LCBDb2xsZWN0aW9uIHByb2ZpbGVNb2RlbHMpIA0KKyAgICBwcml2YXRl IHZvaWQgcHJpbnRNb2RlbFhNSShQcmludFdyaXRlciB3LCBDb2xsZWN0aW9uIHByb2ZpbGVNb2Rl bHMpDQogICAgICAgICB0aHJvd3MgVW1sRXhjZXB0aW9uIHsNCi0gICAgICAgIA0KKw0KICAgICAg ICAgLy8gVE9ETzogV2h5IGlzIHRoaXMgbm90IGV4ZWN1dGVkPyAgUmVtb3ZlIGlmIG5vdCBuZWVk ZWQgLSB0Zm0NCiAgICAgICAgIGlmICh0cnVlKSB7DQogICAgICAgICAgICAgcmV0dXJuOw0KQEAg LTI2NCw4ICsyNjgsOCBAQA0KIA0KICAgICAgICAgU3RyaW5nV3JpdGVyIG15V3JpdGVyID0gbmV3 IFN0cmluZ1dyaXRlcigpOw0KICAgICAgICAgZm9yIChPYmplY3QgbW9kZWwgOiBwcm9maWxlTW9k ZWxzKSB7DQotICAgICAgICAgICAgWG1pV3JpdGVyIHhtaVdyaXRlciA9IE1vZGVsLmdldFhtaVdy aXRlcihtb2RlbCwgDQotICAgICAgICAgICAgICAgIChPdXRwdXRTdHJlYW0pIG51bGwsIC8vbXlX cml0ZXIsIA0KKyAgICAgICAgICAgIFhtaVdyaXRlciB4bWlXcml0ZXIgPSBNb2RlbC5nZXRYbWlX cml0ZXIobW9kZWwsDQorICAgICAgICAgICAgICAgIChPdXRwdXRTdHJlYW0pIG51bGwsIC8vbXlX cml0ZXIsDQogICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uVmVyc2lvbi5nZXRWZXJzaW9uKCkg KyAiKCINCiAgICAgICAgICAgICAgICAgICAgICsgVW1sRmlsZVBlcnNpc3Rlci5QRVJTSVNURU5D RV9WRVJTSU9OICsgIikiKTsNCiAgICAgICAgICAgICB4bWlXcml0ZXIud3JpdGUoKTsNCkBAIC0y ODAsMjAgKzI4NCwyMCBAQA0KICAgICBwdWJsaWMgdm9pZCBsb2FkKFByb2plY3QgcHJvamVjdCwg VVJMIHVybCkgdGhyb3dzIE9wZW5FeGNlcHRpb24gew0KICAgICAgICAgbG9hZChwcm9qZWN0LCBu ZXcgSW5wdXRTb3VyY2UodXJsLnRvRXh0ZXJuYWxGb3JtKCkpKTsNCiAgICAgfQ0KLSAgICANCisN CiB9DQogDQogLyoqDQogICogUGFyc2VyIGZvciBQcm9maWxlIENvbmZpZ3VyYXRpb24uDQotICog DQorICoNCiAgKiBAYXV0aG9yIFRvbSBNb3JyaXMgPHRmbW9ycmlzQGdtYWlsLmNvbT4NCiAgKi8N CiBjbGFzcyBQcm9maWxlQ29uZmlndXJhdGlvblBhcnNlciBleHRlbmRzIFNBWFBhcnNlckJhc2Ug ew0KIA0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyDQotICAg ICAgICAgICAgLmdldExvZ2dlcihQcm9maWxlQ29uZmlndXJhdGlvblBhcnNlci5jbGFzcyk7DQor ICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KKyAgICAgICAgTG9nZ2VyLmdl dExvZ2dlcihQcm9maWxlQ29uZmlndXJhdGlvblBhcnNlci5jbGFzcy5nZXROYW1lKCkpOw0KIA0K LSAgICBwcml2YXRlIFByb2ZpbGVDb25maWd1cmF0aW9uVG9rZW5UYWJsZSB0b2tlbnMgPSANCisg ICAgcHJpdmF0ZSBQcm9maWxlQ29uZmlndXJhdGlvblRva2VuVGFibGUgdG9rZW5zID0NCiAgICAg ICAgIG5ldyBQcm9maWxlQ29uZmlndXJhdGlvblRva2VuVGFibGUoKTsNCiANCiAgICAgcHJpdmF0 ZSBQcm9maWxlIHByb2ZpbGU7DQpAQCAtMzQyLDE3ICszNDYsMTcgQEANCiAgICAgICAgICAgICAg ICAgYnJlYWs7DQogDQogICAgICAgICAgICAgZGVmYXVsdDoNCi0gICAgICAgICAgICAgICAgTE9H Lndhcm4oIldBUk5JTkc6IHVua25vd24gdGFnOiIgKyBlLmdldE5hbWUoKSk7DQorICAgICAgICAg ICAgICAgIExPRy5sb2coTGV2ZWwuV0FSTklORywgIldBUk5JTkc6IHVua25vd24gdGFnOiIgKyBl LmdldE5hbWUoKSk7DQogICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgIH0NCiAg ICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgew0KLSAgICAgICAgICAgIExPRy5lcnJvcigi RXhjZXB0aW9uIGluIHN0YXJ0ZWxlbWVudCIsIGV4KTsNCisgICAgICAgICAgICBMT0cubG9nKExl dmVsLlNFVkVSRSwgIkV4Y2VwdGlvbiBpbiBzdGFydGVsZW1lbnQiLCBleCk7DQogICAgICAgICB9 DQogICAgIH0NCiANCiAgICAgLyoqDQogICAgICAqIENhbGxlZCBieSB0aGUgWE1MIGltcGxlbWVu dGF0aW9uIHRvIHNpZ25hbCB0aGUgZW5kIG9mIGFuIFhNTCBlbnRpdHkuDQotICAgICAqIA0KKyAg ICAgKg0KICAgICAgKiBAcGFyYW0gZSBUaGUgWE1MIGVudGl0eSB0aGF0IGVuZHMuDQogICAgICAq IEB0aHJvd3MgU0FYRXhjZXB0aW9uIG9uIGFueSBlcnJvcg0KICAgICAgKi8NCkBAIC0zNzgsNyAr MzgyLDggQEANCiAgICAgICAgICAgICAgICAgYnJlYWs7DQogDQogICAgICAgICAgICAgZGVmYXVs dDoNCi0gICAgICAgICAgICAgICAgTE9HLndhcm4oIldBUk5JTkc6IHVua25vd24gZW5kIHRhZzoi ICsgZS5nZXROYW1lKCkpOw0KKyAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLldBUk5JTkcs DQorICAgICAgICAgICAgICAgICAgICAgICAgIldBUk5JTkc6IHVua25vd24gZW5kIHRhZzoiICsg ZS5nZXROYW1lKCkpOw0KICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICB9DQog ICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsNCkBAIC0zODgsNyArMzkzLDcgQEANCiAN CiAgICAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlUHJvZmlsZUVuZChYTUxFbGVtZW50IGUpIHsNCiAg ICAgICAgIGlmIChwcm9maWxlcy5pc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICBMT0cud2Fybigi Tm8gcHJvZmlsZXMgZGVmaW5lZCIpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuV0FSTklO RywgIk5vIHByb2ZpbGVzIGRlZmluZWQiKTsNCiAgICAgICAgIH0NCiAgICAgfQ0KIA0KQEAgLTM5 Nyw5ICs0MDIsOSBAQA0KICAgICAgICAgcHJvZmlsZSA9IGxvb2t1cFByb2ZpbGUobmFtZSk7DQog ICAgICAgICBpZiAocHJvZmlsZSAhPSBudWxsKSB7DQogICAgICAgICAgICAgcHJvZmlsZXMuYWRk KHByb2ZpbGUpOw0KLSAgICAgICAgICAgIExPRy5kZWJ1ZygiRm91bmQgcGx1Z2luIHByb2ZpbGUg IiArIG5hbWUpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgIkZvdW5kIHBsdWdp biBwcm9maWxlIHswfSIsIG5hbWUpOw0KICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBM T0cuZXJyb3IoIlVuYWJsZWQgdG8gZmluZCBwbHVnaW4gcHJvZmlsZSAtICIgKyBuYW1lKTsNCisg ICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwgIlVuYWJsZWQgdG8gZmluZCBwbHVnaW4g cHJvZmlsZSAtIHswfSIsIG5hbWUpOw0KICAgICAgICAgfQ0KICAgICB9DQogDQpAQCAtNDI1LDcg KzQzMCw4IEBADQogICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZVVzZXJEZWZpbmVkRW5kKFhNTEVs ZW1lbnQgZSkgew0KICAgICAgICAgLy8gPG1vZGVsPiBpcyBub3QgdXNlZCBpbiBjdXJyZW50IGlt cGxlbWVudGF0aW9uDQogICAgICAgICBpZiAoZmlsZW5hbWUgPT0gbnVsbCAvKiB8fCBtb2RlbCA9 PSBudWxsICovKSB7DQotICAgICAgICAgICAgTE9HLmVycm9yKCJHb3QgYmFkbHkgZm9ybWVkIHVz ZXIgZGVmaW5lZCBwcm9maWxlIGVudHJ5ICIgKyBlKTsNCisgICAgICAgICAgICBMT0cubG9nKExl dmVsLlNFVkVSRSwNCisgICAgICAgICAgICAgICAgICAgICJHb3QgYmFkbHkgZm9ybWVkIHVzZXIg ZGVmaW5lZCBwcm9maWxlIGVudHJ5ICIgKyBlKTsNCiAgICAgICAgIH0NCiAgICAgICAgIHByb2Zp bGUgPSBnZXRNYXRjaGluZ1VzZXJEZWZpbmVkUHJvZmlsZShmaWxlbmFtZSwgUHJvZmlsZUZhY2Fk ZQ0KICAgICAgICAgICAgICAgICAuZ2V0TWFuYWdlcigpKTsNCkBAIC00MzQsMTcgKzQ0MCwxOCBA QA0KICAgICAgICAgICAgIHVucmVzb2x2ZWRGaWxlbmFtZXMuYWRkKGZpbGVuYW1lKTsNCiAgICAg ICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgcHJvZmlsZXMuYWRkKHByb2ZpbGUpOw0KLSAgICAg ICAgICAgIExPRy5kZWJ1ZygiTG9hZGVkIHVzZXIgZGVmaW5lZCBwcm9maWxlIC0gZmlsZW5hbWUg PSAiICsgZmlsZW5hbWUpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwNCisgICAg ICAgICAgICAgICAgICAgICJMb2FkZWQgdXNlciBkZWZpbmVkIHByb2ZpbGUgLSBmaWxlbmFtZSA9 IHswfSIsIGZpbGVuYW1lKTsNCiAgICAgICAgIH0NCiANCiAgICAgfQ0KIA0KICAgICBwcml2YXRl IHN0YXRpYyBQcm9maWxlIGdldE1hdGNoaW5nVXNlckRlZmluZWRQcm9maWxlKFN0cmluZyBmaWxl TmFtZSwNCiAgICAgICAgICAgICBQcm9maWxlTWFuYWdlciBwcm9maWxlTWFuYWdlcikgew0KLSAg ICAgICAgZm9yIChQcm9maWxlIGNhbmRpZGF0ZVByb2ZpbGUgDQorICAgICAgICBmb3IgKFByb2Zp bGUgY2FuZGlkYXRlUHJvZmlsZQ0KICAgICAgICAgICAgICAgICA6IHByb2ZpbGVNYW5hZ2VyLmdl dFJlZ2lzdGVyZWRQcm9maWxlcygpKSB7DQogICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZVByb2Zp bGUgaW5zdGFuY2VvZiBVc2VyRGVmaW5lZFByb2ZpbGUpIHsNCi0gICAgICAgICAgICAgICAgVXNl ckRlZmluZWRQcm9maWxlIHVzZXJQcm9maWxlID0gDQorICAgICAgICAgICAgICAgIFVzZXJEZWZp bmVkUHJvZmlsZSB1c2VyUHJvZmlsZSA9DQogICAgICAgICAgICAgICAgICAgICAoVXNlckRlZmlu ZWRQcm9maWxlKSBjYW5kaWRhdGVQcm9maWxlOw0KICAgICAgICAgICAgICAgICBpZiAodXNlclBy b2ZpbGUuZ2V0TW9kZWxGaWxlKCkgIT0gbnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgICYm IGZpbGVOYW1lDQpAQCAtNDU4LDE3ICs0NjUsMTcgQEANCiANCiAgICAgcHJvdGVjdGVkIHZvaWQg aGFuZGxlRmlsZW5hbWVFbmQoWE1MRWxlbWVudCBlKSB7DQogICAgICAgICBmaWxlbmFtZSA9IGUu Z2V0VGV4dCgpLnRyaW0oKTsNCi0gICAgICAgIExPRy5kZWJ1ZygiR290IGZpbGVuYW1lID0gIiAr IGZpbGVuYW1lKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgIkdvdCBmaWxlbmFtZSA9 IHswfSIsIGZpbGVuYW1lKTsNCiAgICAgfQ0KIA0KICAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVN b2RlbEVuZChYTUxFbGVtZW50IGUpIHsNCiAgICAgICAgIG1vZGVsID0gZS5nZXRUZXh0KCkudHJp bSgpOw0KLSAgICAgICAgTE9HLmRlYnVnKCJHb3QgbW9kZWwgPSAiICsgbW9kZWwpOw0KKyAgICAg ICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiR290IG1vZGVsID0gezB9IiwgbW9kZWwpOw0KICAgICB9 DQogDQogICAgIC8qKg0KICAgICAgKiBUb2tlbiBUYWJsZSBmb3IgUHJvZmlsZSBDb25maWd1cmF0 aW9uIHBhcnNlci4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBhdXRob3IgVG9tIE1vcnJp cw0KICAgICAgKi8NCiAgICAgY2xhc3MgUHJvZmlsZUNvbmZpZ3VyYXRpb25Ub2tlblRhYmxlIGV4 dGVuZHMgWE1MVG9rZW5UYWJsZUJhc2Ugew0KDQpNb2RpZmllZDogdHJ1bmsvc3JjL2FyZ291bWwt YXBwL3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9TQVhQYXJzZXJCYXNlLmphdmENClVybDog aHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3Jj L2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9TQVhQYXJzZXJCYXNlLmph dmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcGVy c2lzdGVuY2UvU0FYUGFyc2VyQmFzZS5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJn b3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3BlcnNpc3RlbmNlL1NBWFBhcnNlckJhc2UuamF2YQky MDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAgKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0b3JzIC0g c2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2Vl IGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNj b21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFu aWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNDMsMTIgKzQz LDEzIEBADQogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07DQogaW1wb3J0IGphdmEuaW8uUmVh ZGVyOw0KIGltcG9ydCBqYXZhLm5ldC5VUkw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxl dmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQogaW1wb3J0IGphdmF4 LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247DQogaW1wb3J0IGphdmF4 LnhtbC5wYXJzZXJzLlNBWFBhcnNlcjsNCiBpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFy c2VyRmFjdG9yeTsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0 IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7DQogaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNl Ow0KIGltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247DQpAQCAtNjIsNyArNjMsOCBAQA0K ICAgICAvKioNCiAgICAgICogTG9nZ2VyLg0KICAgICAgKi8NCi0gICAgcHJpdmF0ZSBzdGF0aWMg ZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoU0FYUGFyc2VyQmFzZS5jbGFzcyk7 DQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KKyAgICAgICAgTG9nZ2Vy LmdldExvZ2dlcihTQVhQYXJzZXJCYXNlLmNsYXNzLmdldE5hbWUoKSk7DQogDQogICAgIC8qKg0K ICAgICAgKiBUaGUgY29uc3RydWN0b3IuDQpAQCAtMTM0LDcgKzEzNiw3IEBADQogICAgIHB1Ymxp YyB2b2lkIHBhcnNlKFJlYWRlciByZWFkZXIpIHRocm93cyBTQVhFeGNlcHRpb24gew0KICAgICAg ICAgcGFyc2UobmV3IElucHV0U291cmNlKHJlYWRlcikpOw0KICAgICB9DQotICAgIA0KKw0KICAg ICAvKioNCiAgICAgICogQHBhcmFtIGlucHV0IHRoZSBJbnB1dFNvdXJjZSB0byByZWFkDQogICAg ICAqIEB0aHJvd3MgU0FYRXhjZXB0aW9uIHdoZW4gcGFyc2luZyB4bWwNCkBAIC0xNjUsOCArMTY3 LDggQEANCiAgICAgICAgIH0gY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkg ew0KICAgICAgICAgICAgIHRocm93IG5ldyBTQVhFeGNlcHRpb24oZSk7DQogICAgICAgICB9DQot ICAgICAgICBpZiAoc3RhdHMgJiYgTE9HLmlzSW5mb0VuYWJsZWQoKSkgew0KLSAgICAgICAgICAg IExPRy5pbmZvKCJFbGFwc2VkIHRpbWU6ICIgKyAoZW5kIC0gc3RhcnQpICsgIiBtcyIpOw0KKyAg ICAgICAgaWYgKHN0YXRzKSB7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLCAiRWxh cHNlZCB0aW1lOiB7MH0gbXMiLCAoZW5kIC0gc3RhcnQpKTsNCiAgICAgICAgIH0NCiAgICAgfQ0K IA0KQEAgLTIwNSw3ICsyMDcsNyBAQA0KIA0KICAgICAgICAgICAgIFhNTEVsZW1lbnQgZWxlbWVu dCA9IGNyZWF0ZVhtbEVsZW1lbnQobmFtZSwgYXR0cyk7DQogDQotICAgICAgICAgICAgaWYgKExP Ry5pc0RlYnVnRW5hYmxlZCgpKSB7DQorICAgICAgICAgICAgaWYgKExPRy5pc0xvZ2dhYmxlKExl dmVsLkZJTkUpKSB7DQogICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3Ry aW5nQnVmZmVyKCk7DQogICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIlNUQVJUOiAiKS5hcHBl bmQobmFtZSkuYXBwZW5kKCcgJykuYXBwZW5kKGVsZW1lbnQpOw0KICAgICAgICAgICAgICAgICBm b3IgKGludCBpID0gMDsgaSA8IGF0dHMuZ2V0TGVuZ3RoKCk7IGkrKykgew0KQEAgLTIxNCw3ICsy MTYsNyBAQA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCcgJykNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoYXR0cy5nZXRWYWx1ZShpKSk7DQog ICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgTE9HLmRlYnVnKGJ1Zi50b1N0cmlu ZygpKTsNCisgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiezB9IiwgYnVmKTsN CiAgICAgICAgICAgICB9DQogDQogICAgICAgICAgICAgZWxlbWVudHNbbkVsZW1lbnRzKytdID0g ZWxlbWVudDsNCkBAIC0yNDgsNyArMjUwLDcgQEANCiAgICAgICAgIHRocm93cyBTQVhFeGNlcHRp b24gew0KICAgICAgICAgaWYgKGlzRWxlbWVudE9mSW50ZXJlc3QobmFtZSkpIHsNCiAgICAgICAg ICAgICBYTUxFbGVtZW50IGUgPSBlbGVtZW50c1stLW5FbGVtZW50c107DQotICAgICAgICAgICAg aWYgKExPRy5pc0RlYnVnRW5hYmxlZCgpKSB7DQorICAgICAgICAgICAgaWYgKExPRy5pc0xvZ2dh YmxlKExldmVsLkZJTkUpKSB7DQogICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBu ZXcgU3RyaW5nQnVmZmVyKCk7DQogICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIkVORDogIiAr IGUuZ2V0TmFtZSgpICsgIiBbIg0KICAgICAgICAgICAgIAkgICAgICAgKyBlLmdldFRleHQoKSAr ICJdICIgKyBlICsgIlxuIik7DQpAQCAtMjU2LDcgKzI1OCw3IEBADQogICAgICAgICAgICAgICAg ICAgICBidWYuYXBwZW5kKCIgICBBVFQ6ICIgKyBlLmdldEF0dHJpYnV0ZU5hbWUoaSkgKyAiICIN CiAgICAgICAgICAgICAgICAgICAgIAkgICArIGUuZ2V0QXR0cmlidXRlVmFsdWUoaSkgKyAiXG4i KTsNCiAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBMT0cuZGVidWcoYnVmKTsN CisgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiezB9IiwgYnVmKTsNCiAgICAg ICAgICAgICB9DQogICAgICAgICAgICAgaGFuZGxlRW5kRWxlbWVudChlKTsNCiAgICAgICAgIH0N CkBAIC0yNzUsMTggKzI3NywxOCBAQA0KIA0KICAgICAvLyBUT0RPOiByZW1vdmUgd2hlbiBjb2Rl IGJlbG93IGluIGNoYXJhY3RlcnMoKSBpcyByZW1vdmVkDQogLy8gICAgcHJpdmF0ZSBzdGF0aWMg ZmluYWwgU3RyaW5nICAgIFJFVFVSTlNUUklORyAgPSAiXG4gICAgICAiOw0KLSAgICANCisNCiAg ICAgLyoNCiAgICAgICogQHNlZSBvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciNjaGFyYWN0ZXJz KGNoYXJbXSwgaW50LCBpbnQpDQogICAgICAqLw0KICAgICBwdWJsaWMgdm9pZCBjaGFyYWN0ZXJz KGNoYXJbXSBjaCwgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoKQ0KICAgICAgICAgdGhyb3dzIFNBWEV4 Y2VwdGlvbiB7DQotICAgICAgICANCisNCiAgICAgICAgIGVsZW1lbnRzW25FbGVtZW50cyAtIDFd LmFkZFRleHQoY2gsIHN0YXJ0LCBsZW5ndGgpOw0KLSAgICAgICAgDQorDQogICAgICAgICAvLyBU T0RPOiBSZW1vdmUgdGhpcyBvbGQgaW1wbGVtZW50YXRpb24gYWZ0ZXIgMC4yMiBpZiBpdCdzDQog ICAgICAgICAvLyBkZW1vbnN0cmF0ZWQgdGhhdCBpdCdzIG5vdCBuZWVkZWQuIC0gdGZtDQotICAg ICAgICANCisNCiAgICAgICAgIC8vIFdoeSBkb2VzIHRoZSB0ZXh0IGdldCBhZGRlZCB0byBBTEwg dGhlIGVsZW1lbnRzIG9uIHRoZSBzdGFjaz8gLSB0Zm0NCiAvLyAgICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBuRWxlbWVudHM7IGkrKykgew0KIC8vICAgICAgICAgICAgWE1MRWxlbWVudCBlID0g ZWxlbWVudHNbaV07DQpAQCAtMzExLDcgKzMxMyw4IEBADQogICAgICAgICAgICAgSW5wdXRTb3Vy Y2UgcyA9IG5ldyBJbnB1dFNvdXJjZSh0ZXN0SXQub3BlblN0cmVhbSgpKTsNCiAgICAgICAgICAg ICByZXR1cm4gczsNCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAg ICAgTE9HLmluZm8oIk5PVEU6IENvdWxkIG5vdCBvcGVuIERURCAiICsgc3lzdGVtSWQNCisgICAg ICAgICAgICBMT0cubG9nKExldmVsLklORk8sDQorICAgICAgICAgICAgICAgICAgICAiTk9URTog Q291bGQgbm90IG9wZW4gRFREICIgKyBzeXN0ZW1JZA0KICAgICAgICAgICAgICAgICAgICAgKyAi IGR1ZSB0byBleGNlcHRpb24iKTsNCiANCiAgICAgICAgICAgICBTdHJpbmcgZHRkTmFtZSA9IHN5 c3RlbUlkLnN1YnN0cmluZyhzeXN0ZW1JZC5sYXN0SW5kZXhPZignLycpICsgMSk7DQpAQCAtMzU4 LDE3ICszNjEsMTMgQEANCiAgICAgICogQHBhcmFtIGUgdGhlIGVsZW1lbnQNCiAgICAgICovDQog ICAgIHB1YmxpYyB2b2lkIGlnbm9yZUVsZW1lbnQoWE1MRWxlbWVudCBlKSB7DQotICAgICAgICBp ZiAoTE9HLmlzRGVidWdFbmFibGVkKCkpIHsNCi0gICAgICAgICAgICBMT0cuZGVidWcoIk5PVEU6 IGlnbm9yaW5nIHRhZzoiICsgZS5nZXROYW1lKCkpOw0KLSAgICAgICAgfQ0KKyAgICAgICAgTE9H LmxvZyhMZXZlbC5GSU5FLCAiTk9URTogaWdub3JpbmcgdGFnOiB7MH0iLCBlLmdldE5hbWUoKSk7 DQogICAgIH0NCiANCiAgICAgLyoqDQogICAgICAqIEBwYXJhbSBlIHRoZSBlbGVtZW50DQogICAg ICAqLw0KICAgICBwdWJsaWMgdm9pZCBub3RJbXBsZW1lbnRlZChYTUxFbGVtZW50IGUpIHsNCi0g ICAgICAgIGlmIChMT0cuaXNEZWJ1Z0VuYWJsZWQoKSkgew0KLSAgICAgICAgICAgIExPRy5kZWJ1 ZygiTk9URTogZWxlbWVudCBub3QgaW1wbGVtZW50ZWQ6ICIgKyBlLmdldE5hbWUoKSk7DQotICAg ICAgICB9DQorICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJOT1RFOiBlbGVtZW50IG5vdCBp bXBsZW1lbnRlZDogezB9IiwgZS5nZXROYW1lKCkpOw0KICAgICB9DQogfSAvKiBlbmQgY2xhc3Mg U0FYUGFyc2VyQmFzZSAqLw0KDQpNb2RpZmllZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9v cmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9Ub2RvUGFyc2VyLmphdmENClVybDogaHR0cDovL2FyZ291 bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBw L3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9Ub2RvUGFyc2VyLmphdmE/dmlldz1kaWZmJnBh dGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcGVyc2lzdGVuY2UvVG9kb1Bh cnNlci5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9h cmdvdW1sL3BlcnNpc3RlbmNlL1RvZG9QYXJzZXIuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4 MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0g KiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJp Z2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0 cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0K ICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVi bGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9u LCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNDEsOCArNDEsOSBAQA0KIGltcG9ydCBqYXZhLmlv LlJlYWRlcjsNCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCiBpbXBvcnQgamF2YS51dGls Lkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0 aWwubG9nZ2luZy5Mb2dnZXI7DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0K IGltcG9ydCBvcmcuYXJnb3VtbC5jb2duaXRpdmUuRGVzaWduZXI7DQogaW1wb3J0IG9yZy5hcmdv dW1sLmNvZ25pdGl2ZS5MaXN0U2V0Ow0KIGltcG9ydCBvcmcuYXJnb3VtbC5jb2duaXRpdmUuUmVz b2x2ZWRDcml0aWM7DQpAQCAtNjIsNyArNjMsOCBAQA0KICAgICAvKioNCiAgICAgICogTG9nZ2Vy Lg0KICAgICAgKi8NCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dl ci5nZXRMb2dnZXIoVG9kb1BhcnNlci5jbGFzcyk7DQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFs IExvZ2dlciBMT0cgPQ0KKyAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihUb2RvUGFyc2VyLmNsYXNz LmdldE5hbWUoKSk7DQogDQogICAgIHByaXZhdGUgVG9kb1Rva2VuVGFibGUgdG9rZW5zID0gbmV3 IFRvZG9Ub2tlblRhYmxlKCk7DQogDQpAQCAtMTA3LDE2ICsxMDksMTYgQEANCiANCiAgICAgLyoq DQogICAgICAqIFJlYWQgYW4gWE1MIHRvZG8gbGlzdCBhbmQgZW50ZXIgYW55IHRvZG8gaXRlbXMg aW50byB0aGUgY3VycmVudCBkZXNpZ25lci4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBw YXJhbSBpbnB1dFNvdXJjZSBUaGUgc3RyZWFtIGNvbnRhaW5pbmcgVG9kb0xpc3QgWE1MIGRhdGEu DQogICAgICAqIEB0aHJvd3MgU0FYRXhjZXB0aW9uIG9uIGFueSBlcnJvcg0KICAgICAgKi8NCiAg ICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlYWRUb2RvTGlzdCgNCiAgICAgICAgICAgICBJ bnB1dFNvdXJjZSBpbnB1dFNvdXJjZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7DQotICAgICAgICBM T0cuaW5mbygiUmVhZGluZyBUb0RvIGxpc3QiKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuSU5G TywgIlJlYWRpbmcgVG9EbyBsaXN0Iik7DQogICAgICAgICBwYXJzZShpbnB1dFNvdXJjZSk7DQog ICAgIH0NCi0gICAgDQorDQogICAgIC8qKg0KICAgICAgKiBSZWFkcyBhbiBYTUwgdG9kbyBsaXN0 IGZyb20gSW5wdXRTdHJlYW0gaXMgYW5kIGVudGVycw0KICAgICAgKiBhbnkgdG9kbyBpdGVtcyBp bnRvIHRoZSBjdXJyZW50IGRlc2lnbmVyLg0KQEAgLTEyNyw4ICsxMjksOSBAQA0KICAgICBwdWJs aWMgc3luY2hyb25pemVkIHZvaWQgcmVhZFRvZG9MaXN0KA0KICAgICAgICAgICAgIFJlYWRlciBp cykgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7DQogDQotICAgICAgICBMT0cuaW5mbygiPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7DQotICAgICAgICBMT0cuaW5mbygiPT0g UkVBRElORyBUTyBETyBMSVNUIik7DQorICAgICAgICBMT0cubG9nKExldmVsLklORk8sDQorICAg ICAgICAgICAgICAgICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIN CisgICAgICAgICAgICAgICAgKyAiPT0gUkVBRElORyBUTyBETyBMSVNUIik7DQogICAgICAgICBw YXJzZShpcyk7DQogICAgIH0NCiANCkBAIC0xNzMsMTEgKzE3NiwxMSBAQA0KIAkJYnJlYWs7DQog DQogCSAgICBkZWZhdWx0Og0KLQkJTE9HLndhcm4oIldBUk5JTkc6IHVua25vd24gdGFnOiIgKyBl LmdldE5hbWUoKSk7DQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuV0FSTklORywgIldB Uk5JTkc6IHVua25vd24gdGFnOiIgKyBlLmdldE5hbWUoKSk7DQogCQlicmVhazsNCiAJICAgIH0N CiAJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7DQotCSAgICBMT0cuZXJyb3IoIkV4Y2VwdGlvbiBp biBzdGFydGVsZW1lbnQiLCBleCk7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUs ICJFeGNlcHRpb24gaW4gc3RhcnRlbGVtZW50IiwgZXgpOw0KIAl9DQogICAgIH0NCiANCkBAIC0y MzEsOCArMjM0LDggQEANCiAgICAgICAgIAlicmVhazsNCiANCiAgICAgICAgICAgICBkZWZhdWx0 Og0KLSAgICAgICAgCUxPRy53YXJuKCJXQVJOSU5HOiB1bmtub3duIGVuZCB0YWc6Ig0KLSAgICAg ICAgCQkgKyBlLmdldE5hbWUoKSk7DQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuV0FS TklORywNCisgICAgICAgICAgICAgICAgICAgICAgICAiV0FSTklORzogdW5rbm93biBlbmQgdGFn OiIgKyBlLmdldE5hbWUoKSk7DQogICAgICAgICAJYnJlYWs7DQogICAgICAgICAgICAgfQ0KICAg ICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7DQpAQCAtNDY0LDcgKzQ2Nyw3IEBADQogICAg ICAqIGZvciBYTUwgc2VyaWFsaXphdGlvbiBpcyBhIHdlbGwga25vd24gdGFzayAtIHRmbQ0KICAg ICAgKiBJIGhhdmUgbmV2ZXIgdW5kZXJzdG9vZCB3aHkgdGhpcyBpcyBiZWluZyBkb25lLiBJIHRo aW5rIHdlIHNob3VsZCByZW1vdmUNCiAgICAgICogYW55IHVzYWdlIC0gYm9iDQotICAgICAqIA0K KyAgICAgKg0KICAgICAgKiBAcGFyYW0Jc3RyCVRoZSBTdHJpbmcgdG8gZW5jb2RlLg0KICAgICAg KiBAcmV0dXJuCVRoZSBlbmNvZGVkIFN0cmluZy4NCiAgICAgICovDQpAQCAtNTA0LDQgKzUwNywz IEBADQogCXJldHVybiBzYi50b1N0cmluZygpOw0KICAgICB9DQogfQ0KLQ0KDQpNb2RpZmllZDog dHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9VbWxGaWxl UGVyc2lzdGVyLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJv d3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0 ZW5jZS9VbWxGaWxlUGVyc2lzdGVyLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5 MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1s LWFwcC9zcmMvb3JnL2FyZ291bWwvcGVyc2lzdGVuY2UvVW1sRmlsZVBlcnNpc3Rlci5qYXZhCShv cmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3BlcnNp c3RlbmNlL1VtbEZpbGVQZXJzaXN0ZXIuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBA IC02NSw2ICs2NSw4IEBADQogaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ29kaW5nRXJyb3JBY3Rp b247DQogaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7DQogaW1wb3J0IGphdmEudXRpbC5MaXN0 Ow0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51dGlsLmxv Z2dpbmcuTG9nZ2VyOw0KIGltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsNCiBpbXBvcnQg amF2YS51dGlsLnJlZ2V4LlBhdHRlcm47DQogDQpAQCAtNzUsNyArNzcsNiBAQA0KIGltcG9ydCBq YXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7DQogaW1wb3J0IGphdmF4Lnht bC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVNvdXJjZTsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5s b2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmFwcGxpY2F0aW9uLmFwaS5BcmdvOw0K IGltcG9ydCBvcmcuYXJnb3VtbC5hcHBsaWNhdGlvbi5oZWxwZXJzLkFwcGxpY2F0aW9uVmVyc2lv bjsNCiBpbXBvcnQgb3JnLmFyZ291bWwuaTE4bi5UcmFuc2xhdG9yOw0KQEAgLTkyLDcgKzkzLDcg QEANCiANCiAvKioNCiAgKiBUbyBwZXJzaXN0IHRvIGFuZCBmcm9tIGFyZ28gKHhtbCBmaWxlKSBz dG9yYWdlLg0KLSAqIA0KKyAqDQogICogQGF1dGhvciBCb2IgVGFybGluZw0KICAqLw0KIHB1Ymxp YyBjbGFzcyBVbWxGaWxlUGVyc2lzdGVyIGV4dGVuZHMgQWJzdHJhY3RGaWxlUGVyc2lzdGVyIHsN CkBAIC0xMTMsNyArMTE0LDggQEANCiAgICAgLyoqDQogICAgICAqIExvZ2dlci4NCiAgICAgICov DQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dnZXIuZ2V0TG9nZ2Vy KFVtbEZpbGVQZXJzaXN0ZXIuY2xhc3MpOw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dn ZXIgTE9HID0NCisgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoVW1sRmlsZVBlcnNpc3Rlci5jbGFz cy5nZXROYW1lKCkpOw0KIA0KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVJHT19U RUUgPSAiL29yZy9hcmdvdW1sL3BlcnNpc3RlbmNlL2FyZ28udGVlIjsNCiANCkBAIC0xMzksMTkg KzE0MSwxOSBAQA0KIA0KICAgICAvKioNCiAgICAgICogU2F2ZSB0aGUgcHJvamVjdCBpbiAiLnVt bCIgZm9ybWF0Lg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIGZpbGUgVGhlIGZp bGUgdG8gd3JpdGUuDQogICAgICAqIEBwYXJhbSBwcm9qZWN0IHRoZSBwcm9qZWN0IHRvIHNhdmUN CiAgICAgICogQHRocm93cyBTYXZlRXhjZXB0aW9uIHdoZW4gYW55dGhpbmcgZ29lcyB3cm9uZw0K ICAgICAgKiBAdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIGlmIHRoZSB0aHJlYWQgaXMgaW50 ZXJydXB0ZWQNCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBzZWUgb3JnLmFyZ291bWwucGVy c2lzdGVuY2UuUHJvamVjdEZpbGVQZXJzaXN0ZXIjc2F2ZShvcmcuYXJnb3VtbC5rZXJuZWwuUHJv amVjdCwNCiAgICAgICogICAgICBqYXZhLmlvLkZpbGUpDQogICAgICAqLw0KICAgICBwdWJsaWMg dm9pZCBkb1NhdmUoUHJvamVjdCBwcm9qZWN0LCBGaWxlIGZpbGUpIHRocm93cyBTYXZlRXhjZXB0 aW9uLA0KICAgICAgICAgSW50ZXJydXB0ZWRFeGNlcHRpb24gew0KIA0KLSAgICAgICAgLyogUmV0 YWluIHRoZSBwcmV2aW91cyBwcm9qZWN0IGZpbGUgZXZlbiB3aGVuIHRoZSBzYXZlIG9wZXJhdGlv biANCisgICAgICAgIC8qIFJldGFpbiB0aGUgcHJldmlvdXMgcHJvamVjdCBmaWxlIGV2ZW4gd2hl biB0aGUgc2F2ZSBvcGVyYXRpb24NCiAgICAgICAgICAqIGNyYXNoZXMgaW4gdGhlIG1pZGRsZS4g QWxzbyBjcmVhdGUgYSBiYWNrdXAgZmlsZSBhZnRlciBzYXZpbmcuICovDQogICAgICAgICBib29s ZWFuIGRvU2FmZVNhdmVzID0gdXNlU2FmZVNhdmVzKCk7DQogDQpAQCAtMTg4LDkgKzE5MCw4IEBA DQogICAgICAgICAgICAgcHJvZ3Jlc3NNZ3IubmV4dFBoYXNlKCk7DQogDQogICAgICAgICAgICAg U3RyaW5nIHBhdGggPSBmaWxlLmdldFBhcmVudCgpOw0KLSAgICAgICAgICAgIGlmIChMT0cuaXNJ bmZvRW5hYmxlZCgpKSB7DQotICAgICAgICAgICAgICAgIExPRy5pbmZvKCJEaXIgPT0iICsgcGF0 aCk7DQotICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywg IkRpciA9PSB7MH0iLCBwYXRoKTsNCiANCiAgICAgICAgICAgICBpZiAoZG9TYWZlU2F2ZXMpIHsN CiAgICAgICAgICAgICAgICAgLy8gaWYgc2F2ZSBkaWQgbm90IHJhaXNlIGFuIGV4Y2VwdGlvbg0K QEAgLTIxMCw3ICsyMTEsNyBAQA0KICAgICAgICAgICAgIHByb2dyZXNzTWdyLm5leHRQaGFzZSgp Ow0KIA0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICBMT0cu ZXJyb3IoIkV4Y2VwdGlvbiBvY2N1cmVkIGR1cmluZyBzYXZlIGF0dGVtcHQiLCBlKTsNCisgICAg ICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwgIkV4Y2VwdGlvbiBvY2N1cmVkIGR1cmluZyBz YXZlIGF0dGVtcHQiLCBlKTsNCiANCiAgICAgICAgICAgICBpZiAoZG9TYWZlU2F2ZXMpIHsNCiAg ICAgICAgICAgICAgICAgLy8gZnJhbms6IGluIGNhc2Ugb2YgZXhjZXB0aW9uDQpAQCAtMjMxLDcg KzIzMiw3IEBADQogDQogICAgIC8qKg0KICAgICAgKiBUaGUgLnVtbCBzYXZlIGZvcm1hdCBpcyBu byBsb25nZXIgYXZhaWxhYmxlIHRvIHNhdmUuDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiB7 QGluaGVyaXREb2N9DQogICAgICAqLw0KICAgICBAT3ZlcnJpZGUNCkBAIC0yNDEsNyArMjQyLDcg QEANCiANCiAgICAgLyoqDQogICAgICAqIFdyaXRlIHRoZSBvdXRwdXQgZm9yIGEgcHJvamVjdCBv biB0aGUgZ2l2ZW4gc3RyZWFtLg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIHBy b2plY3QgVGhlIHByb2plY3QgdG8gb3V0cHV0Lg0KICAgICAgKiBAcGFyYW0gc3RyZWFtIFRoZSBz dHJlYW0gdG8gd3JpdGUgdG8uDQogICAgICAqIEB0aHJvd3MgU2F2ZUV4Y2VwdGlvbiBJZiBzb21l dGhpbmcgZ29lcyB3cm9uZy4NCkBAIC0yODIsOSArMjgzLDkgQEANCiANCiAgICAgICAgICAgICAv LyBOb3RlIHdlIGFzc3VtZSBtZW1iZXJzIGFyZSBvcmRlcmVkIGNvcnJlY3RseSBhbHJlYWR5DQog ICAgICAgICAgICAgZm9yIChQcm9qZWN0TWVtYmVyIHByb2plY3RNZW1iZXIgOiBwcm9qZWN0Lmdl dE1lbWJlcnMoKSkgew0KLSAgICAgICAgICAgICAgICBpZiAoTE9HLmlzSW5mb0VuYWJsZWQoKSkg ew0KLSAgICAgICAgICAgICAgICAgICAgTE9HLmluZm8oIlNhdmluZyBtZW1iZXIgOiAiICsgcHJv amVjdE1lbWJlcik7DQotICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgTE9H LmxvZyhMZXZlbC5JTkZPLCAiU2F2aW5nIG1lbWJlcjogezB9IiwgcHJvamVjdE1lbWJlcik7DQor DQogICAgICAgICAgICAgICAgIE1lbWJlckZpbGVQZXJzaXN0ZXIgcGVyc2lzdGVyID0gZ2V0TWVt YmVyRmlsZVBlcnNpc3Rlcihwcm9qZWN0TWVtYmVyKTsNCiAgICAgICAgICAgICAgICAgZmlsdGVy ZWRTdHJlYW0uc3RhcnRFbnRyeSgpOw0KICAgICAgICAgICAgICAgICBwZXJzaXN0ZXIuc2F2ZShw cm9qZWN0TWVtYmVyLCBmaWx0ZXJlZFN0cmVhbSk7DQpAQCAtMzMxLDcgKzMzMiw3IEBADQogICAg ICAgICAgICAgLy8gUnVuIHRocm91Z2ggYW55IHN0eWxlc2hlZXQgdXBncmFkZXMNCiAgICAgICAg ICAgICBpbnQgZmlsZVZlcnNpb24gPSBnZXRQZXJzaXN0ZW5jZVZlcnNpb25Gcm9tRmlsZShmaWxl KTsNCiANCi0gICAgICAgICAgICBMT0cuaW5mbygiTG9hZGluZyB1bWwgZmlsZSBvZiB2ZXJzaW9u ICIgKyBmaWxlVmVyc2lvbik7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLCAiTG9h ZGluZyB1bWwgZmlsZSBvZiB2ZXJzaW9uIHswfSIsIGZpbGVWZXJzaW9uKTsNCiAgICAgICAgICAg ICBpZiAoIWNoZWNrVmVyc2lvbihmaWxlVmVyc2lvbiwgZ2V0UmVsZWFzZVZlcnNpb25Gcm9tRmls ZShmaWxlKSkpIHsNCiAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gdXBncmFk ZSB0aGUgZmlsZSBsZXRzIHRha2UgYW4gYXJjaGl2ZQ0KICAgICAgICAgICAgICAgICAvLyBvZiBp dCBmaXJzdC4NCkBAIC0zNDQsMTEgKzM0NSwxNCBAQA0KIA0KICAgICAgICAgICAgICAgICB3aGls ZSAoZmlsZVZlcnNpb24gPCBQRVJTSVNURU5DRV9WRVJTSU9OKSB7DQogICAgICAgICAgICAgICAg ICAgICArK2ZpbGVWZXJzaW9uOw0KLSAgICAgICAgICAgICAgICAgICAgTE9HLmluZm8oIlVwZ3Jh ZGluZyB0byB2ZXJzaW9uICIgKyBmaWxlVmVyc2lvbik7DQorDQorICAgICAgICAgICAgICAgICAg ICBMT0cubG9nKExldmVsLklORk8sICJVcGdyYWRpbmcgdG8gdmVyc2lvbiB7MH0iLCBmaWxlVmVy c2lvbik7DQorDQogICAgICAgICAgICAgICAgICAgICBsb25nIHN0YXJ0VGltZSA9IFN5c3RlbS5j dXJyZW50VGltZU1pbGxpcygpOw0KICAgICAgICAgICAgICAgICAgICAgZmlsZSA9IHRyYW5zZm9y bShmaWxlLCBmaWxlVmVyc2lvbik7DQorDQogICAgICAgICAgICAgICAgICAgICBsb25nIGVuZFRp bWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsNCi0gICAgICAgICAgICAgICAgICAgIExP Ry5pbmZvKCJVcGdyYWRpbmcgdG9vayAiICsgKChlbmRUaW1lIC0gc3RhcnRUaW1lKSAvIDEwMDAp DQorICAgICAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJVcGdyYWRpbmcgdG9v ayAiICsgKChlbmRUaW1lIC0gc3RhcnRUaW1lKSAvIDEwMDApDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICsgIiBzZWNvbmRzIik7DQogICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc01n ci5uZXh0UGhhc2UoKTsNCiAgICAgICAgICAgICAgICAgfQ0KQEAgLTM2NiwxMyArMzcwLDEzIEBA DQogDQogICAgICAgICAgICAgTGlzdCBtZW1iZXJMaXN0ID0gcGFyc2VyLmdldE1lbWJlckxpc3Qo KTsNCiANCi0gICAgICAgICAgICBMT0cuaW5mbyhtZW1iZXJMaXN0LnNpemUoKSArICIgbWVtYmVy cyIpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTyxtZW1iZXJMaXN0LnNpemUoKSAr ICIgbWVtYmVycyIpOw0KIA0KICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWVtYmVy TGlzdC5zaXplKCk7ICsraSkgew0KICAgICAgICAgICAgICAgICBNZW1iZXJGaWxlUGVyc2lzdGVy IHBlcnNpc3RlciA9IGdldE1lbWJlckZpbGVQZXJzaXN0ZXIoKFN0cmluZykgbWVtYmVyTGlzdA0K ICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoaSkpOw0KLSAgICAgICAgICAgICAgICBMT0cu aW5mbygiTG9hZGluZyBtZW1iZXIgd2l0aCAiDQotICAgICAgICAgICAgICAgICAgICAgICAgKyBw ZXJzaXN0ZXIuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOw0KKyAgICAgICAgICAgICAgICBMT0cubG9n KExldmVsLklORk8sICJMb2FkaW5nIG1lbWJlciB3aXRoICIrIHBlcnNpc3Rlci5nZXRDbGFzcygp LmdldE5hbWUoKSk7DQorDQogICAgICAgICAgICAgICAgIGlucHV0U3RyZWFtLnJlb3BlbihwZXJz aXN0ZXIuZ2V0TWFpblRhZygpKTsNCiAgICAgICAgICAgICAgICAgLy8gVE9ETzogRG8gd2UgbmVl ZCB0byBzZXQgdGhlIGlucHV0IGVuY29kaW5nIGhlcmU/IEl0IHdhcw0KICAgICAgICAgICAgICAg ICAvLyBkb25lIGZvciBUb0RvIHBhcnNpbmcsIGJ1dCBub25lIG9mIHRoZSBvdGhlciBtZW1iZXIg dHlwZXMNCkBAIC00MzUsNyArNDM5LDcgQEANCiANCiAgICAgLyoqDQogICAgICAqIFRyYW5zZm9y bSBhIHN0cmluZyBvZiBYTUwgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIHNlcnZpY2UgcmVxdWlyZWQu DQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAcGFyYW0gZmlsZSBUaGUgWE1MIGZpbGUgdG8g YmUgdHJhbnNmb3JtZWQNCiAgICAgICogQHBhcmFtIHZlcnNpb24gdGhlIHZlcnNpb24gb2YgdGhl IHBlcnNpc3RlbmNlIGZvcm1hdCB0aGUgWE1MIGlzIHRvIGJlDQogICAgICAqICAgICAgICAgICAg dHJhbnNmb3JtZWQgdG8uDQpAQCAtNDUwLDcgKzQ1NCw4IEBADQogDQogICAgICAgICAgICAgU3Ry aW5nIHhzbHRGaWxlTmFtZSA9IHVwZ3JhZGVGaWxlc1BhdGggKyB1cGdyYWRlRmlsZTsNCiAgICAg ICAgICAgICBVUkwgeHNsdFVybCA9IFVtbEZpbGVQZXJzaXN0ZXIuY2xhc3MuZ2V0UmVzb3VyY2Uo eHNsdEZpbGVOYW1lKTsNCi0gICAgICAgICAgICBMT0cuaW5mbygiUmVzb3VyY2UgaXMgIiArIHhz bHRVcmwpOw0KKw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywgIlJlc291cmNlIGlz IHswfSIsIHhzbHRVcmwpOw0KIA0KICAgICAgICAgICAgIC8vIFJlYWQgeHNsdFN0cmVhbSBpbnRv IGEgdGVtcG9yYXJ5IGZpbGUNCiAgICAgICAgICAgICAvLyBHZXQgdXJsIGZvciB0ZW1wIGZpbGUu DQpAQCAtNDg3LDcgKzQ5Miw3IEBADQogICAgIC8qKg0KICAgICAgKiBSZWFkIHN0cmVhbSBpbiAu YXJnbyBmb3JtYXQgYW5kIGV4dHJhY3RzIHRoZSBwZXJzaXN0ZW5jZSB2ZXJzaW9uIG51bWJlcg0K ICAgICAgKiBmcm9tIHRoZSByb290IHRhZy4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBw YXJhbSBmaWxlIHRoZSBYTUwgZmlsZQ0KICAgICAgKiBAcmV0dXJuIFRoZSB2ZXJzaW9uIG51bWJl cg0KICAgICAgKiBAdGhyb3dzIE9wZW5FeGNlcHRpb24gb24gYW55IGVycm9yDQpAQCAtNTE3LDcg KzUyMiw3IEBADQogICAgIC8qKg0KICAgICAgKiBSZWFkcyBhbiBYTUwgZmlsZSBvZiB1bWwgZm9y bWF0IGFuZCBleHRyYWN0cyB0aGUgcGVyc2lzdGVuY2UgdmVyc2lvbg0KICAgICAgKiBudW1iZXIg ZnJvbSB0aGUgcm9vdCB0YWcuDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAcGFyYW0gaW5w dXRTdHJlYW0gc3RyZWFtIHBvaW50aW5nIHRvIGZpbGUgdG8gcmVhZC4NCiAgICAgICogQHJldHVy biBUaGUgdmVyc2lvbiBudW1iZXINCiAgICAgICogQHRocm93cyBPcGVuRXhjZXB0aW9uIG9uIGFu eSBlcnJvcg0KQEAgLTU1NSw3ICs1NjAsNyBAQA0KICAgICAvKioNCiAgICAgICogUmVhZHMgYW4g WE1MIGZpbGUgb2YgdW1sIGZvcm1hdCBhbmQgZXh0cmFjdHMgdGhlIHBlcnNpc3RlbmNlIHZlcnNp b24NCiAgICAgICogbnVtYmVyIGZyb20gdGhlIHJvb3QgdGFnLg0KLSAgICAgKiANCisgICAgICoN CiAgICAgICogQHBhcmFtIGZpbGUgdGhlIFhNTCBmaWxlDQogICAgICAqIEByZXR1cm4gVGhlIEFy Z29VTUwgcmVsZWFzZSBudW1iZXINCiAgICAgICogQHRocm93cyBPcGVuRXhjZXB0aW9uIG9uIGFu eSBlcnJvcg0KQEAgLTU4NSw3ICs1OTAsNyBAQA0KICAgICAvKioNCiAgICAgICogUmVhZHMgYW4g WE1MIGZpbGUgb2YgdW1sIGZvcm1hdCBhbmQgZXh0cmFjdHMgdGhlIHBlcnNpc3RlbmNlIHZlcnNp b24NCiAgICAgICogbnVtYmVyIGZyb20gdGhlIHJvb3QgdGFnLg0KLSAgICAgKiANCisgICAgICoN CiAgICAgICogQHBhcmFtIGlucHV0U3RyZWFtIHRoZSBzdHJlYW0gcG9pbnQgdG8gdGhlIFhNTCBm aWxlDQogICAgICAqIEByZXR1cm4gVGhlIEFyZ29VTUwgcmVsZWFzZSBudW1iZXINCiAgICAgICog QHRocm93cyBPcGVuRXhjZXB0aW9uIG9uIGFueSBlcnJvcg0KQEAgLTYyOCw3ICs2MzMsNyBAQA0K IA0KICAgICAvKioNCiAgICAgICogR2V0IHRoZSB2ZXJzaW9uIGF0dHJpYnV0ZSB2YWx1ZSBmcm9t IGEgc3RyaW5nIG9mIFhNTC4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSByb290 TGluZSB0aGUgbGluZQ0KICAgICAgKiBAcmV0dXJuIHRoZSB2ZXJzaW9uDQogICAgICAqLw0KQEAg LTY0Nyw3ICs2NTIsNyBAQA0KIA0KICAgICAvKioNCiAgICAgICogUmV0dXJucyB0cnVlLiBBbGwg QXJnbyBzcGVjaWZpYyBmaWxlcyBoYXZlIGFuIGljb24uDQotICAgICAqIA0KKyAgICAgKg0KICAg ICAgKiB7QGluaGVyaXREb2N9DQogICAgICAqLw0KICAgICBwdWJsaWMgYm9vbGVhbiBoYXNBbklj b24oKSB7DQpAQCAtNjU3LDcgKzY2Miw3IEBADQogICAgIC8qKg0KICAgICAgKiBDbGFzcyB0byBm aWx0ZXIgWE1MIGRlY2xhcmF0aW9uIGFuZCBET0NUWVBFIGRlY2xhcmF0aW9uIGZyb20gYW4gb3V0 cHV0DQogICAgICAqIHN0cmVhbSB0byBhbGxvdyB1c2UgYXMgbmVzdGVkIFhNTCBmaWxlcy4NCi0g ICAgICogDQorICAgICAqDQogICAgICAqIEBhdXRob3IgVG9tIE1vcnJpcw0KICAgICAgKi8NCiAg ICAgY2xhc3MgWG1sRmlsdGVyT3V0cHV0U3RyZWFtIGV4dGVuZHMgRmlsdGVyT3V0cHV0U3RyZWFt IHsNCkBAIC03MDMsNyArNzA4LDcgQEANCiAgICAgICAgIC8qKg0KICAgICAgICAgICogQ29uc3Ry dWN0IGEgZmlsdGVyZWQgb3V0cHV0IHN0cmVhbSB1c2luZyB0aGUgZ2l2ZW4gY2hhcmFjdGVyIHNl dA0KICAgICAgICAgICogbmFtZS4NCi0gICAgICAgICAqIA0KKyAgICAgICAgICoNCiAgICAgICAg ICAqIEBwYXJhbSBvdXRwdXRTdHJlYW0gc291cmNlIG91dHB1dCBzdHJlYW0gdG8gZmlsdGVyDQog ICAgICAgICAgKiBAcGFyYW0gY2hhcnNldE5hbWUgbmFtZSBvZiBjaGFyYWN0ZXIgc2V0IHRvIHVz ZSBmb3IgZW5jb2RpbmcNCiAgICAgICAgICAqLw0KQEAgLTcxNCw3ICs3MTksNyBAQA0KIA0KICAg ICAgICAgLyoqDQogICAgICAgICAgKiBDb25zdHJ1Y3QgYSBmaWx0ZXJlZCBvdXRwdXQgc3RyZWFt IHVzaW5nIHRoZSBnaXZlbiBjaGFyYWN0ZXIgc2V0Lg0KLSAgICAgICAgICogDQorICAgICAgICAg Kg0KICAgICAgICAgICogQHBhcmFtIG91dHB1dFN0cmVhbSBzb3VyY2Ugb3V0cHV0IHN0cmVhbSB0 byBmaWx0ZXINCiAgICAgICAgICAqIEBwYXJhbSBjaGFyc2V0IGNoYXJhY3RlciBzZXQgdG8gdXNl IGZvciBlbmNvZGluZw0KICAgICAgICAgICovDQpAQCAtODI3LDcgKzgzMiw3IEBADQogDQogICAg ICAgICAvKioNCiAgICAgICAgICAqIENsb3NlIHRoZSBzdHJlYW0uDQotICAgICAgICAgKiANCisg ICAgICAgICAqDQogICAgICAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQogICAgICAgICAgKi8N CiAgICAgICAgIHB1YmxpYyB2b2lkIHJlYWxseUNsb3NlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsN Cg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcGVyc2lz dGVuY2UvWE1MVG9rZW5UYWJsZUJhc2UuamF2YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50aWdyaXMu b3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9h cmdvdW1sL3BlcnNpc3RlbmNlL1hNTFRva2VuVGFibGVCYXNlLmphdmE/dmlldz1kaWZmJnBhdGhy ZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRy dW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcGVyc2lzdGVuY2UvWE1MVG9rZW5U YWJsZUJhc2UuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9v cmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9YTUxUb2tlblRhYmxlQmFzZS5qYXZhCTIwMTItMTItMzAg MDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQogLyogJElkJA0KICAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cN CisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAg KiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcg bWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg RWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBk aXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCkBAIC0zOSwxNSArMzksMTYgQEANCiBw YWNrYWdlIG9yZy5hcmdvdW1sLnBlcnNpc3RlbmNlOw0KIA0KIGltcG9ydCBqYXZhLnV0aWwuSGFz aHRhYmxlOw0KLQ0KLWltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsNCitpbXBvcnQgamF2 YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsN CiANCiAvKioNCiAgKiBAYXV0aG9yIEppbSBIb2x5DQogICovDQogDQogYWJzdHJhY3QgY2xhc3Mg WE1MVG9rZW5UYWJsZUJhc2Ugew0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9H ID0gTG9nZ2VyLmdldExvZ2dlcihYTUxUb2tlblRhYmxlQmFzZS5jbGFzcyk7DQorICAgIHByaXZh dGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KKyAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihY TUxUb2tlblRhYmxlQmFzZS5jbGFzcy5nZXROYW1lKCkpOw0KIA0KICAgICAvLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQogICAg IC8vIGluc3RhbmNlIHZhcmlhYmxlcw0KQEAgLTg0LDcgKzg1LDcgQEANCiAJaWYgKHB1c2gpIHsN CiAJICAgIG9wZW5UYWdzWysrbnVtT3Blbl0gPSBzOw0KIAl9IGVsc2UgaWYgKHMuZXF1YWxzKG9w ZW5UYWdzW251bU9wZW5dKSkgew0KLQkgICAgTE9HLmRlYnVnKCJtYXRjaGVkOiAiICsgcyk7DQor ICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAibWF0Y2hlZDogezB9Iiwgcyk7DQogCSAg ICByZXR1cm4gb3BlblRva2Vuc1tudW1PcGVuLS1dOw0KIAl9DQogCUludGVnZXIgaSA9IChJbnRl Z2VyKSB0b2tlbnMuZ2V0KHMpOw0KQEAgLTExNywxMyArMTE4LDE0IEBADQogICAgICAgICBib29s ZWFuIGVycm9yID0gZmFsc2U7DQogCWlmIChkYmcpIHsNCiAJICAgIGlmICh0b2tlbnMuY29udGFp bnMoaSkgfHwgdG9rZW5zLmNvbnRhaW5zS2V5KHMpKSB7DQotCQlMT0cuZXJyb3IoIkVSUk9SOiB0 b2tlbiB0YWJsZSBhbHJlYWR5IGNvbnRhaW5zICIgKyBzKTsNCisgICAgICAgICAgICAgICAgTE9H LmxvZyhMZXZlbC5TRVZFUkUsDQorICAgICAgICAgICAgICAgICAgICAgICAgIkVSUk9SOiB0b2tl biB0YWJsZSBhbHJlYWR5IGNvbnRhaW5zICIgKyBzKTsNCiAJCWVycm9yID0gdHJ1ZTsNCiAJICAg IH0NCiAJfQ0KIAl0b2tlbnMucHV0KHMsIGkpOw0KIAlpZiAoZGJnICYmICFlcnJvcikgew0KLSAg ICAgICAgICAgIExPRy5kZWJ1ZygiTk9URTogYWRkZWQgJyIgKyBzICsgIicgdG8gdG9rZW4gdGFi bGUiKTsNCisgICAgICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJOT1RFOiBhZGRlZCB7MH0g dG8gdG9rZW4gdGFibGUiLCBzKTsNCiAgICAgICAgIH0NCiAgICAgfQ0KIA0KDQpNb2RpZmllZDog dHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9YbWlGaWxl UGVyc2lzdGVyLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJv d3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0 ZW5jZS9YbWlGaWxlUGVyc2lzdGVyLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5 MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1s LWFwcC9zcmMvb3JnL2FyZ291bWwvcGVyc2lzdGVuY2UvWG1pRmlsZVBlcnNpc3Rlci5qYXZhCShv cmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3BlcnNp c3RlbmNlL1htaUZpbGVQZXJzaXN0ZXIuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBA IC00OSw4ICs0OSw5IEBADQogaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOw0KIGltcG9ydCBq YXZhLnV0aWwuQXJyYXlMaXN0Ow0KIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCitpbXBvcnQgamF2 YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsN CiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1s LmkxOG4uVHJhbnNsYXRvcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwua2VybmVsLlByb2plY3Q7DQog aW1wb3J0IG9yZy5hcmdvdW1sLmtlcm5lbC5Qcm9qZWN0RmFjdG9yeTsNCkBAIC02NiwyMCArNjcs MjAgQEANCiAgKg0KICAqIEBhdXRob3IgQm9iIFRhcmxpbmcNCiAgKi8NCi1jbGFzcyBYbWlGaWxl UGVyc2lzdGVyIGV4dGVuZHMgQWJzdHJhY3RGaWxlUGVyc2lzdGVyIA0KK2NsYXNzIFhtaUZpbGVQ ZXJzaXN0ZXIgZXh0ZW5kcyBBYnN0cmFjdEZpbGVQZXJzaXN0ZXINCiAgICAgaW1wbGVtZW50cyBY bWlFeHRlbnNpb25QYXJzZXIgew0KICAgICAvKioNCiAgICAgICogTG9nZ2VyLg0KICAgICAgKi8N CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9DQotICAgICAgICBMb2dnZXIu Z2V0TG9nZ2VyKFhtaUZpbGVQZXJzaXN0ZXIuY2xhc3MpOw0KKyAgICAgICAgTG9nZ2VyLmdldExv Z2dlcihYbWlGaWxlUGVyc2lzdGVyLmNsYXNzLmdldE5hbWUoKSk7DQogDQogICAgIHByaXZhdGUg TGlzdDxTdHJpbmc+IHBnbWxTdHJpbmdzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7DQotICAg IA0KKw0KICAgICBwcml2YXRlIFN0cmluZyB0b2RvU3RyaW5nOw0KLSAgICANCisNCiAgICAgcHJp dmF0ZSBTdHJpbmcgYXJnb1N0cmluZzsNCi0gICAgDQorDQogICAgIC8qKg0KICAgICAgKiBUaGUg Y29uc3RydWN0b3IuDQogICAgICAqLw0KQEAgLTExOCwxNCArMTE5LDE0IEBADQogICAgIHB1Ymxp YyB2b2lkIGRvU2F2ZShQcm9qZWN0IHByb2plY3QsIEZpbGUgZmlsZSkNCiAgICAgICAgIHRocm93 cyBTYXZlRXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7DQogDQotICAgICAgICAvKiBS ZXRhaW4gdGhlIHByZXZpb3VzIHByb2plY3QgZmlsZSBldmVuIHdoZW4gdGhlIHNhdmUgb3BlcmF0 aW9uIA0KKyAgICAgICAgLyogUmV0YWluIHRoZSBwcmV2aW91cyBwcm9qZWN0IGZpbGUgZXZlbiB3 aGVuIHRoZSBzYXZlIG9wZXJhdGlvbg0KICAgICAgICAgICogY3Jhc2hlcyBpbiB0aGUgbWlkZGxl LiBBbHNvIGNyZWF0ZSBhIGJhY2t1cCBmaWxlIGFmdGVyIHNhdmluZy4gKi8NCiAgICAgICAgIGJv b2xlYW4gZG9TYWZlU2F2ZXMgPSB1c2VTYWZlU2F2ZXMoKTsNCi0gICAgICAgIA0KKw0KICAgICAg ICAgUHJvZ3Jlc3NNZ3IgcHJvZ3Jlc3NNZ3IgPSBuZXcgUHJvZ3Jlc3NNZ3IoKTsNCiAgICAgICAg IHByb2dyZXNzTWdyLnNldE51bWJlck9mUGhhc2VzKDQpOw0KICAgICAgICAgcHJvZ3Jlc3NNZ3Iu bmV4dFBoYXNlKCk7DQotICAgICAgICANCisNCiAgICAgICAgIEZpbGUgbGFzdEFyY2hpdmVGaWxl ID0gbmV3IEZpbGUoZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSArICJ+Iik7DQogICAgICAgICBGaWxl IHRlbXBGaWxlID0gbnVsbDsNCiANCkBAIC0xNjcsNyArMTY4LDcgQEANCiAgICAgICAgICAgICB9 IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkgeyB9DQogICAgICAgICAgICAgdGhyb3cgZXhjOw0KICAg ICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICBMT0cuZXJyb3IoIkV4 Y2VwdGlvbiBvY2N1cmVkIGR1cmluZyBzYXZlIGF0dGVtcHQiLCBlKTsNCisgICAgICAgICAgICBM T0cubG9nKExldmVsLlNFVkVSRSwgIkV4Y2VwdGlvbiBvY2N1cmVkIGR1cmluZyBzYXZlIGF0dGVt cHQiLCBlKTsNCiAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICBzdHJlYW0uY2xv c2UoKTsNCiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkgeyB9DQpAQCAtMTg0 LDcgKzE4NSw3IEBADQogICAgICAgICB9DQogICAgICAgICBwcm9ncmVzc01nci5uZXh0UGhhc2Uo KTsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIFdyaXRlIHRoZSBvdXRwdXQg Zm9yIGEgcHJvamVjdCBvbiB0aGUgZ2l2ZW4gc3RyZWFtLg0KICAgICAgKg0KQEAgLTE5NSw5ICsx OTYsOSBAQA0KICAgICAgKiBAdGhyb3dzIFNhdmVFeGNlcHRpb24gSWYgc29tZXRoaW5nIGdvZXMg d3JvbmcuDQogICAgICAqIEB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gICAgIGlmIHRoZSB0 aHJlYWQgaXMgaW50ZXJydXB0ZWQNCiAgICAgICovDQotICAgIHZvaWQgd3JpdGVQcm9qZWN0KFBy b2plY3QgcHJvamVjdCwgDQotICAgICAgICAgICAgT3V0cHV0U3RyZWFtIHN0cmVhbSwgDQotICAg ICAgICAgICAgUHJvZ3Jlc3NNZ3IgcHJvZ3Jlc3NNZ3IpIHRocm93cyBTYXZlRXhjZXB0aW9uLCAN CisgICAgdm9pZCB3cml0ZVByb2plY3QoUHJvamVjdCBwcm9qZWN0LA0KKyAgICAgICAgICAgIE91 dHB1dFN0cmVhbSBzdHJlYW0sDQorICAgICAgICAgICAgUHJvZ3Jlc3NNZ3IgcHJvZ3Jlc3NNZ3Ip IHRocm93cyBTYXZlRXhjZXB0aW9uLA0KICAgICAgICAgICAgIEludGVycnVwdGVkRXhjZXB0aW9u IHsNCiANCiAgICAgICAgIGludCBzaXplID0gcHJvamVjdC5nZXRNZW1iZXJzKCkuc2l6ZSgpOw0K QEAgLTIwNSwxMCArMjA2LDkgQEANCiAgICAgICAgICAgICBQcm9qZWN0TWVtYmVyIHByb2plY3RN ZW1iZXIgPQ0KICAgICAgICAgICAgICAgICBwcm9qZWN0LmdldE1lbWJlcnMoKS5nZXQoaSk7DQog ICAgICAgICAgICAgaWYgKHByb2plY3RNZW1iZXIuZ2V0VHlwZSgpLmVxdWFsc0lnbm9yZUNhc2Uo Z2V0RXh0ZW5zaW9uKCkpKSB7DQotICAgICAgICAgICAgICAgIGlmIChMT0cuaXNJbmZvRW5hYmxl ZCgpKSB7DQotICAgICAgICAgICAgICAgICAgICBMT0cuaW5mbygiU2F2aW5nIG1lbWJlciBvZiB0 eXBlOiAiDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKHByb2plY3QuZ2V0TWVtYmVy cygpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldChpKSkuZ2V0VHlw ZSgpKTsNCisgICAgICAgICAgICAgICAgaWYgKExPRy5pc0xvZ2dhYmxlKExldmVsLklORk8pKSB7 DQorICAgICAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJTYXZpbmcgbWVtYmVy IG9mIHR5cGU6IHswfSIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RNZW1i ZXIuZ2V0VHlwZSgpKTsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICBNZW1i ZXJGaWxlUGVyc2lzdGVyIHBlcnNpc3RlciA9IG5ldyBNb2RlbE1lbWJlckZpbGVQZXJzaXN0ZXIo KTsNCiAgICAgICAgICAgICAgICAgcGVyc2lzdGVyLnNhdmUocHJvamVjdE1lbWJlciwgc3RyZWFt KTsNCkBAIC0yNDIsMTIgKzI0MiwxMiBAQA0KICAgICBwdWJsaWMgUHJvamVjdCBkb0xvYWQoRmls ZSBmaWxlKQ0KICAgICAgICAgdGhyb3dzIE9wZW5FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0 aW9uIHsNCiANCi0gICAgICAgIExPRy5pbmZvKCJMb2FkaW5nIHdpdGggWE1JRmlsZVBlcnNpc3Rl ciIpOw0KLSAgICAgICAgDQorICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJMb2FkaW5nIHdp dGggWE1JRmlsZVBlcnNpc3RlciIpOw0KKw0KICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICBQ cm9qZWN0IHAgPSBQcm9qZWN0RmFjdG9yeS5nZXRJbnN0YW5jZSgpLmNyZWF0ZVByb2plY3QoKTsN Ci0gICAgICAgICAgICANCi0gICAgICAgICAgICANCisNCisNCiAgICAgICAgICAgICBsb25nIGxl bmd0aCA9IGZpbGUubGVuZ3RoKCk7DQogICAgICAgICAgICAgbG9uZyBwaGFzZVNwYWNlID0gMTAw MDAwOw0KICAgICAgICAgICAgIGludCBwaGFzZXMgPSAoaW50KSAobGVuZ3RoIC8gcGhhc2VTcGFj ZSk7DQpAQCAtMjU1LDIwICsyNTUsMjAgQEANCiAgICAgICAgICAgICAgICAgcGhhc2VTcGFjZSA9 IGxlbmd0aCAvIDEwOw0KICAgICAgICAgICAgICAgICBwaGFzZXMgPSAxMDsNCiAgICAgICAgICAg ICB9DQotICAgICAgICAgICAgTE9HLmluZm8oIkZpbGUgbGVuZ3RoIGlzICIgKyBsZW5ndGggKyAi IHBoYXNlIHNwYWNlIGlzICINCisgICAgICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJGaWxl IGxlbmd0aCBpcyAiICsgbGVuZ3RoICsgIiBwaGFzZSBzcGFjZSBpcyAiDQogICAgICAgICAgICAg ICAgICAgICArIHBoYXNlU3BhY2UgKyAiIHBoYXNlcyBpcyAiICsgcGhhc2VzKTsNCiAgICAgICAg ICAgICBQcm9ncmVzc01nciBwcm9ncmVzc01nciA9IG5ldyBQcm9ncmVzc01ncigpOw0KICAgICAg ICAgICAgIHByb2dyZXNzTWdyLnNldE51bWJlck9mUGhhc2VzKHBoYXNlcyk7DQogICAgICAgICAg ICAgVGhyZWFkVXRpbHMuY2hlY2tJZkludGVycnVwdGVkKCk7DQotICAgICAgICAgICAgDQorDQog ICAgICAgICAgICAgSW5wdXRTb3VyY2Ugc291cmNlID0gbmV3IElucHV0U291cmNlKG5ldyBYbWlJ bnB1dFN0cmVhbShmaWxlDQogICAgICAgICAgICAgICAgICAgICAudG9VUkkoKS50b1VSTCgpLm9w ZW5TdHJlYW0oKSwgdGhpcywgcGhhc2VTcGFjZSwNCiAgICAgICAgICAgICAgICAgICAgIHByb2dy ZXNzTWdyKSk7DQogICAgICAgICAgICAgc291cmNlLnNldFN5c3RlbUlkKGZpbGUudG9VUkkoKS50 b1VSTCgpLnRvU3RyaW5nKCkpOw0KLSAgICAgICAgICAgIA0KKw0KICAgICAgICAgICAgIE1vZGVs TWVtYmVyRmlsZVBlcnNpc3RlciBtb2RlbFBlcnNpc3RlciA9DQogICAgICAgICAgICAgICAgIG5l dyBNb2RlbE1lbWJlckZpbGVQZXJzaXN0ZXIoKTsNCi0gICAgICAgICAgICANCisNCiAgICAgICAg ICAgICBtb2RlbFBlcnNpc3Rlci5yZWFkTW9kZWxzKHNvdXJjZSk7DQogICAgICAgICAgICAgT2Jq ZWN0IG1vZGVsID0gbW9kZWxQZXJzaXN0ZXIuZ2V0Q3VyTW9kZWwoKTsNCiAgICAgICAgICAgICBw cm9ncmVzc01nci5uZXh0UGhhc2UoKTsNCkBAIC0yNzgsMTIgKzI3OCwxMiBAQA0KICAgICAgICAg ICAgIHAuYWRkTWVtYmVyKG1vZGVsKTsNCiAgICAgICAgICAgICBwYXJzZVhtaUV4dGVuc2lvbnMo cCk7DQogICAgICAgICAgICAgbW9kZWxQZXJzaXN0ZXIucmVnaXN0ZXJEaWFncmFtcyhwKTsNCi0g ICAgICAgICAgICANCisNCiAgICAgICAgICAgICBwLnNldFJvb3QobW9kZWwpOw0KICAgICAgICAg ICAgIHAuc2V0Um9vdHMobW9kZWxQZXJzaXN0ZXIuZ2V0RWxlbWVudHNSZWFkKCkpOw0KICAgICAg ICAgICAgIHAudXBkYXRlUm9vdHMoKTsNCiAgICAgICAgICAgICBGaWxlIGRlZmF1bHRQcm9qZWN0 RmlsZSA9IG5ldyBGaWxlKGZpbGUuZ2V0UGF0aCgpICsgIi56YXJnbyIpOw0KLSAgICAgICAgICAg IC8vIE1ha2Ugc3VyZSB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IHNvIHRoZSB1c2VyIHdpbGwgDQor ICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3Qgc28gdGhlIHVz ZXIgd2lsbA0KICAgICAgICAgICAgIC8vIGdldCBwcm9tcHRlZCB0byBjaG9vc2UgYSBuZXcgbmFt ZQ0KICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTk7IGkrKykgew0KICAgICAgICAg ICAgICAgICBpZiAoIWRlZmF1bHRQcm9qZWN0RmlsZS5leGlzdHMoKSkgew0KQEAgLTMwNCw3ICsz MDQsNyBAQA0KIA0KICAgICAvKioNCiAgICAgICogUmV0dXJucyB0cnVlLiBBbGwgQXJnbyBzcGVj aWZpYyBmaWxlcyBoYXZlIGFuIGljb24uDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAc2Vl IG9yZy5hcmdvdW1sLnBlcnNpc3RlbmNlLkFic3RyYWN0RmlsZVBlcnNpc3RlciNoYXNBbkljb24o KQ0KICAgICAgKi8NCiAgICAgcHVibGljIGJvb2xlYW4gaGFzQW5JY29uKCkgew0KQEAgLTMyOSwx NCArMzI5LDE1IEBADQogDQogICAgIC8qKg0KICAgICAgKiBQYXJzZSBhbGwgdGhlIGV4dGVuc2lv bnMgdGhhdCB3ZXJlIGZvdW5kIHdoZW4gcmVhZGluZyBYTUkNCi0gICAgICogDQorICAgICAqDQog ICAgICAqIEBwYXJhbSBwcm9qZWN0DQogICAgICAqIEBleGNlcHRpb24gT3BlbkV4Y2VwdGlvbg0K ICAgICAgKi8NCiAgICAgcHVibGljIHZvaWQgcGFyc2VYbWlFeHRlbnNpb25zKFByb2plY3QgcHJv amVjdCkgdGhyb3dzIE9wZW5FeGNlcHRpb24gew0KLSAgICAgICAgDQorDQogICAgICAgICBpZiAo YXJnb1N0cmluZyAhPSBudWxsKSB7DQotICAgICAgICAgICAgTE9HLmluZm8oIlBhcnNpbmcgYXJn b1N0cmluZyAiICsgYXJnb1N0cmluZy5sZW5ndGgoKSk7DQorICAgICAgICAgICAgTE9HLmxvZyhM ZXZlbC5JTkZPLCAiUGFyc2luZyBhcmdvU3RyaW5nIHswfSIsIGFyZ29TdHJpbmcubGVuZ3RoKCkp Ow0KKw0KICAgICAgICAgICAgIFN0cmluZ1JlYWRlciBpbnB1dFN0cmVhbSA9IG5ldyBTdHJpbmdS ZWFkZXIoYXJnb1N0cmluZyk7DQogICAgICAgICAgICAgQXJnb1BhcnNlciBwYXJzZXIgPSBuZXcg QXJnb1BhcnNlcigpOw0KICAgICAgICAgICAgIHRyeSB7DQpAQCAtMzQ4LDkgKzM0OSwxMCBAQA0K ICAgICAgICAgICAgIHByb2plY3QuYWRkTWVtYmVyKG5ldyBQcm9qZWN0TWVtYmVyVG9kb0xpc3Qo IiIsIHByb2plY3QpKTsNCiAgICAgICAgIH0NCiAgICAgICAgIGZvciAoU3RyaW5nIHBnbWwgOiBw Z21sU3RyaW5ncykgew0KLSAgICAgICAgICAgIExPRy5pbmZvKCJQYXJzaW5nIHBnbWwgIiArIHBn bWwubGVuZ3RoKCkpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywgIlBhcnNpbmcg cGdtbCB7MH0iLCBwZ21sLmxlbmd0aCgpKTsNCisNCiAgICAgICAgICAgICBJbnB1dFN0cmVhbSBp bnB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShwZ21sLmdldEJ5dGVzKCkpOw0K LSAgICAgICAgICAgIE1lbWJlckZpbGVQZXJzaXN0ZXIgcGVyc2lzdGVyID0gDQorICAgICAgICAg ICAgTWVtYmVyRmlsZVBlcnNpc3RlciBwZXJzaXN0ZXIgPQ0KICAgICAgICAgICAgIC8vIFRPRE86 IEN5Y2xpYyBkZXBlbmRlbmN5IGJldHdlZW4gUGVyc2lzdGFuY2VNYW5hZ2VyIGFuZCBoZXJlDQog ICAgICAgICAgICAgICAgIFBlcnNpc3RlbmNlTWFuYWdlci5nZXRJbnN0YW5jZSgpDQogICAgICAg ICAgICAgICAgICAgICAgICAgLmdldERpYWdyYW1NZW1iZXJGaWxlUGVyc2lzdGVyKCk7DQpAQCAt MzU5LDggKzM2MSw5IEBADQogICAgICAgICAgICAgcGVyc2lzdGVyLmxvYWQocHJvamVjdCwgaW5w dXRTdHJlYW0pOw0KICAgICAgICAgfQ0KICAgICAgICAgaWYgKHRvZG9TdHJpbmcgIT0gbnVsbCkg ew0KLSAgICAgICAgICAgIExPRy5pbmZvKCJQYXJzaW5nIHRvZG9TdHJpbmcgIiArIHRvZG9TdHJp bmcubGVuZ3RoKCkpOw0KLSAgICAgICAgICAgIElucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gDQor ICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLCAiUGFyc2luZyB0b2RvU3RyaW5nIHswfSIs IHRvZG9TdHJpbmcubGVuZ3RoKCkpOw0KKw0KKyAgICAgICAgICAgIElucHV0U3RyZWFtIGlucHV0 U3RyZWFtID0NCiAgICAgICAgICAgICAgICAgbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHRvZG9T dHJpbmcuZ2V0Qnl0ZXMoKSk7DQogICAgICAgICAgICAgTWVtYmVyRmlsZVBlcnNpc3RlciBwZXJz aXN0ZXIgPSBudWxsOw0KICAgICAgICAgICAgIHBlcnNpc3RlciA9IG5ldyBUb2RvTGlzdE1lbWJl ckZpbGVQZXJzaXN0ZXIoKTsNCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMv b3JnL2FyZ291bWwvcGVyc2lzdGVuY2UvWG1sSW5wdXRTdHJlYW0uamF2YQ0KVXJsOiBodHRwOi8v YXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9zcmMvYXJnb3Vt bC1hcHAvc3JjL29yZy9hcmdvdW1sL3BlcnNpc3RlbmNlL1htbElucHV0U3RyZWFtLmphdmE/dmll dz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcGVyc2lzdGVu Y2UvWG1sSW5wdXRTdHJlYW0uamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwt YXBwL3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9YbWxJbnB1dFN0cmVhbS5qYXZhCTIwMTIt MTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQogLyogJElkJA0KICAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIENvbnRyaWJ1dG9ycyAt IHNlZSBiZWxvdw0KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEyIENvbnRyaWJ1dG9ycyAtIHNl ZSBiZWxvdw0KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFj Y29tcGFueWluZyBtYXRlcmlhbHMNCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAgKiB3aGljaCBhY2NvbXBh bmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KQEAgLTQ1LDEwICs0 NSw4IEBADQogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KIGltcG9ydCBqYXZhLnV0aWwuSXRl cmF0b3I7DQogaW1wb3J0IGphdmEudXRpbC5NYXA7DQotDQotLy9pbXBvcnQgamF2YXguc3dpbmcu ZXZlbnQuRXZlbnRMaXN0ZW5lckxpc3Q7DQotDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9n Z2VyOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51dGls LmxvZ2dpbmcuTG9nZ2VyOw0KIA0KIA0KIC8qKg0KQEAgLTYyLDcgKzYwLDcgQEANCiAgKiBUT0RP OiBUaGlzIGlzIGhhcmR3aXJlZCB0byBhc3N1bWUgYSBmaXhlZCBzaW5nbGUgYnl0ZQ0KICAqIGNo YXJhY3RlciBlbmNvZGluZy4gIEl0IG5lZWRzIHRvIGJlIHVwZGF0ZWQgdG8gaGFuZGxlIGRpZmZl cmVudA0KICAqIGVuY29kaW5ncywgaW5jbHVkaW5nIG11bHRpLWJ5dGUgZW5jb2RpbmdzLiAtIHRm bSAyMDA3MDYwNw0KLSAqIA0KKyAqDQogICogQGF1dGhvciBCb2IgVGFybGluZw0KICAqLw0KIGNs YXNzIFhtbElucHV0U3RyZWFtIGV4dGVuZHMgQnVmZmVyZWRJbnB1dFN0cmVhbSB7DQpAQCAtODIs NyArODAsNyBAQA0KICAgICAgKiBMb2dnZXIuDQogICAgICAqLw0KICAgICBwcml2YXRlIHN0YXRp YyBmaW5hbCBMb2dnZXIgTE9HID0NCi0gICAgICAgIExvZ2dlci5nZXRMb2dnZXIoWG1sSW5wdXRT dHJlYW0uY2xhc3MpOw0KKyAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihYbWxJbnB1dFN0cmVhbS5j bGFzcy5nZXROYW1lKCkpOw0KIA0KICAgICAvKioNCiAgICAgICogQ29uc3RydWN0IGEgbmV3IFht bElucHV0U3RyZWFtLg0KQEAgLTIxMSw3ICsyMDksNyBAQA0KICAgICAgICAgICAgICAgICAgICAg Ly8gY292ZXIgdGhlIGNhc2Ugd2UgZGVhbCB3aXRoLiAgVXNpbmcgYSByZWFsIFhNTCBwYXJzZXIN CiAgICAgICAgICAgICAgICAgICAgIC8vIHdvdWxkIGJlIGJldHRlci4NCiAgICAgICAgICAgICAg ICAgICAgIC8vIExvb2sgZm9yIFhNTCBkb2N1bWVudCBoYXMganVzdCBhIHNpbmdsZSByb290IGVs ZW1lbnQNCi0gICAgICAgICAgICAgICAgICAgIHx8IChjdXJyZW50VGFnLmNoYXJBdChjdXJyZW50 VGFnLmxlbmd0aCgpIC0gMSkgPT0gJy8nIA0KKyAgICAgICAgICAgICAgICAgICAgfHwgKGN1cnJl bnRUYWcuY2hhckF0KGN1cnJlbnRUYWcubGVuZ3RoKCkgLSAxKSA9PSAnLycNCiAgICAgICAgICAg ICAgICAgICAgICAgICAmJiB0YWcuc3RhcnRzV2l0aCh0YWdOYW1lKQ0KICAgICAgICAgICAgICAg ICAgICAgICAgICYmIHRhZy5pbmRleE9mKCcgJykgPT0gdGFnTmFtZS5pbmRleE9mKCcgJykpKSB7 DQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KQEAgLTMwNSw4ICszMDMsOCBAQA0KICAg ICAgICAgICAgICAgICAgICAgICAgIGNoID0gKGNoYXIpIHJlYWxSZWFkKCk7DQogICAgICAgICAg ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICBlbmRUYWdOYW1lID0gIi8iICsgdGFn TmFtZTsNCi0gICAgICAgICAgICAgICAgICAgIExPRy5pbmZvKCJTdGFydCB0YWcgPSAiICsgdGFn TmFtZSk7DQotICAgICAgICAgICAgICAgICAgICBMT0cuaW5mbygiRW5kIHRhZyA9ICIgKyBlbmRU YWdOYW1lKTsNCisgICAgICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywgIlN0YXJ0 IHRhZyA9IHswfSIsIHRhZ05hbWUpOw0KKyAgICAgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZl bC5JTkZPLCAiRW5kIHRhZyA9IHswfSIsIGVuZFRhZ05hbWUpOw0KICAgICAgICAgICAgICAgICB9 DQogICAgICAgICAgICAgICAgIHJlc2V0KCk7DQogICAgICAgICAgICAgICAgIHJldHVybjsNCg0K TW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcGVyc2lzdGVu Y2UvWmFyZ29GaWxlUGVyc2lzdGVyLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9y Zy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJn b3VtbC9wZXJzaXN0ZW5jZS9aYXJnb0ZpbGVQZXJzaXN0ZXIuamF2YT92aWV3PWRpZmYmcGF0aHJl dj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1 bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9aYXJnb0ZpbGVQ ZXJzaXN0ZXIuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9v cmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9aYXJnb0ZpbGVQZXJzaXN0ZXIuamF2YQkyMDEyLTEyLTMw IDA1OjA2OjAxLTA4MDANCkBAIC01NywxMSArNTcsMTIgQEANCiBpbXBvcnQgamF2YS5uZXQuVVJM Ow0KIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsN CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dn aW5nLkxvZ2dlcjsNCiBpbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsNCiBpbXBvcnQgamF2 YS51dGlsLnppcC5aaXBJbnB1dFN0cmVhbTsNCiBpbXBvcnQgamF2YS51dGlsLnppcC5aaXBPdXRw dXRTdHJlYW07DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KIGltcG9ydCBv cmcuYXJnb3VtbC5hcHBsaWNhdGlvbi5hcGkuQXJnbzsNCiBpbXBvcnQgb3JnLmFyZ291bWwuYXBw bGljYXRpb24uaGVscGVycy5BcHBsaWNhdGlvblZlcnNpb247DQogaW1wb3J0IG9yZy5hcmdvdW1s LmkxOG4uVHJhbnNsYXRvcjsNCkBAIC04NSw3ICs4Niw3IEBADQogICAgICAqIExvZ2dlci4NCiAg ICAgICovDQogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KLQlMb2dnZXIu Z2V0TG9nZ2VyKFphcmdvRmlsZVBlcnNpc3Rlci5jbGFzcyk7DQorICAgICAgICBMb2dnZXIuZ2V0 TG9nZ2VyKFphcmdvRmlsZVBlcnNpc3Rlci5jbGFzcy5nZXROYW1lKCkpOw0KIA0KICAgICAvKioN CiAgICAgICogVGhlIGNvbnN0cnVjdG9yLg0KQEAgLTEyNSwxOCArMTI2LDE4IEBADQogICAgICAq ICAgICAgb3JnLmFyZ291bWwua2VybmVsLlByb2plY3QsIGphdmEuaW8uRmlsZSkNCiAgICAgICov DQogICAgIEBPdmVycmlkZQ0KLSAgICBwdWJsaWMgdm9pZCBkb1NhdmUoUHJvamVjdCBwcm9qZWN0 LCBGaWxlIGZpbGUpIHRocm93cyBTYXZlRXhjZXB0aW9uLCANCisgICAgcHVibGljIHZvaWQgZG9T YXZlKFByb2plY3QgcHJvamVjdCwgRmlsZSBmaWxlKSB0aHJvd3MgU2F2ZUV4Y2VwdGlvbiwNCiAg ICAgSW50ZXJydXB0ZWRFeGNlcHRpb24gew0KIA0KLSAgICAgICAgTE9HLmluZm8oIlNhdmluZyIp Ow0KLSAgICAgICAgLyogUmV0YWluIHRoZSBwcmV2aW91cyBwcm9qZWN0IGZpbGUgZXZlbiB3aGVu IHRoZSBzYXZlIG9wZXJhdGlvbiANCisgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywgIlNhdmlu ZyIpOw0KKyAgICAgICAgLyogUmV0YWluIHRoZSBwcmV2aW91cyBwcm9qZWN0IGZpbGUgZXZlbiB3 aGVuIHRoZSBzYXZlIG9wZXJhdGlvbg0KICAgICAgICAgICogY3Jhc2hlcyBpbiB0aGUgbWlkZGxl LiBBbHNvIGNyZWF0ZSBhIGJhY2t1cCBmaWxlIGFmdGVyIHNhdmluZy4gKi8NCiAgICAgICAgIGJv b2xlYW4gZG9TYWZlU2F2ZXMgPSB1c2VTYWZlU2F2ZXMoKTsNCiANCiAgICAgICAgIFByb2dyZXNz TWdyIHByb2dyZXNzTWdyID0gbmV3IFByb2dyZXNzTWdyKCk7DQogICAgICAgICBwcm9ncmVzc01n ci5zZXROdW1iZXJPZlBoYXNlcyg0KTsNCiAgICAgICAgIHByb2dyZXNzTWdyLm5leHRQaGFzZSgp Ow0KLSAgICAgICAgDQorDQogICAgICAgICBGaWxlIGxhc3RBcmNoaXZlRmlsZSA9IG5ldyBGaWxl KGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkgKyAifiIpOw0KICAgICAgICAgRmlsZSB0ZW1wRmlsZSA9 IG51bGw7DQogDQpAQCAtMTYzLDEwICsxNjQsMTEgQEANCiANCiAgICAgICAgICAgICBmb3IgKFBy b2plY3RNZW1iZXIgcHJvamVjdE1lbWJlciA6IHByb2plY3QuZ2V0TWVtYmVycygpKSB7DQogICAg ICAgICAgICAgICAgIGlmIChwcm9qZWN0TWVtYmVyLmdldFR5cGUoKS5lcXVhbHNJZ25vcmVDYXNl KCJ4bWkiKSkgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKExPRy5pc0luZm9FbmFibGVkKCkp IHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBMT0cuaW5mbygiU2F2aW5nIG1lbWJlciBvZiB0 eXBlOiAiDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHByb2plY3RNZW1iZXIu Z2V0VHlwZSgpKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAg ICAgIExPRy5sb2coTGV2ZWwuSU5GTywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNh dmluZyBtZW1iZXIgb2YgdHlwZTogezB9IiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHJvamVjdE1lbWJlci5nZXRUeXBlKCkpOw0KKw0KICAgICAgICAgICAgICAgICAgICAgc3RyZWFt LnB1dE5leHRFbnRyeSgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFppcEVudHJ5 KHByb2plY3RNZW1iZXIuZ2V0WmlwTmFtZSgpKSk7DQogICAgICAgICAgICAgICAgICAgICBNZW1i ZXJGaWxlUGVyc2lzdGVyIHBlcnNpc3RlciA9DQpAQCAtMTc0LDcgKzE3Niw3IEBADQogICAgICAg ICAgICAgICAgICAgICBwZXJzaXN0ZXIuc2F2ZShwcm9qZWN0TWVtYmVyLCBzdHJlYW0pOw0KICAg ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIA0KKw0KICAgICAg ICAgICAgIGlmIChkb1NhZmVTYXZlcykgew0KICAgICAgICAgICAgICAgICAvLyBpZiBzYXZlIGRp ZCBub3QgcmFpc2UgYW4gZXhjZXB0aW9uDQogICAgICAgICAgICAgICAgIC8vIGFuZCBuYW1lKyIj IiBleGlzdHMgbW92ZSBuYW1lKyIjIiB0byBuYW1lKyJ+Ig0KQEAgLTE5Myw3ICsxOTUsNyBAQA0K ICAgICAgICAgICAgIHByb2dyZXNzTWdyLm5leHRQaGFzZSgpOw0KIA0KICAgICAgICAgfSBjYXRj aCAoRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICBMT0cuZXJyb3IoIkV4Y2VwdGlvbiBvY2N1 cmVkIGR1cmluZyBzYXZlIGF0dGVtcHQiLCBlKTsNCisgICAgICAgICAgICBMT0cubG9nKExldmVs LlNFVkVSRSwgIkV4Y2VwdGlvbiBvY2N1cmVkIGR1cmluZyBzYXZlIGF0dGVtcHQiLCBlKTsNCiAg ICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtICE9IG51bGwpIHsN CiAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5jbG9zZSgpOw0KQEAgLTIxNiwxMCArMjE4LDEw IEBADQogICAgICAgICB0cnkgew0KICAgICAgICAgICAgIHN0cmVhbS5jbG9zZSgpOw0KICAgICAg ICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsNCi0gICAgICAgICAgICBMT0cuZXJyb3IoIkZh aWxlZCB0byBjbG9zZSBzYXZlIG91dHB1dCB3cml0ZXIiLCBleCk7DQorICAgICAgICAgICAgTE9H LmxvZyhMZXZlbC5TRVZFUkUsICJGYWlsZWQgdG8gY2xvc2Ugc2F2ZSBvdXRwdXQgd3JpdGVyIiwg ZXgpOw0KICAgICAgICAgfQ0KICAgICB9DQotICAgIA0KKw0KICAgICAvKg0KICAgICAgKiBAc2Vl IG9yZy5hcmdvdW1sLnBlcnNpc3RlbmNlLkFic3RyYWN0RmlsZVBlcnNpc3RlciNpc1NhdmVFbmFi bGVkKCkNCiAgICAgICovDQpAQCAtMjM0LDcgKzIzNiw3IEBADQogICAgIEBPdmVycmlkZQ0KICAg ICBwdWJsaWMgUHJvamVjdCBkb0xvYWQoRmlsZSBmaWxlKQ0KICAgICAgICAgdGhyb3dzIE9wZW5F eGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsNCi0gICAgICAgIA0KKw0KICAgICAgICAg UHJvZ3Jlc3NNZ3IgcHJvZ3Jlc3NNZ3IgPSBuZXcgUHJvZ3Jlc3NNZ3IoKTsNCiAgICAgICAgIHBy b2dyZXNzTWdyLnNldE51bWJlck9mUGhhc2VzKDMgKyBVTUxfUEhBU0VTX0xPQUQpOw0KICAgICAg ICAgVGhyZWFkVXRpbHMuY2hlY2tJZkludGVycnVwdGVkKCk7DQpAQCAtMjU1LDE3ICsyNTcsMTcg QEANCiAgICAgICAgIC8vIFRPRE86IFRoZSBjb21tZW50ZWQgY29kZSBiZWxvdyB3YXMgY29tbWVu dGVkIG91dCBieSBCb2IgVGFybGluZw0KICAgICAgICAgLy8gaW4gb3JkZXIgdG8gcmVzb2x2ZSBi dWdzIDQ4NDUgYW5kIDQ4NTcuIEhvcGVmdWxseSB3ZSBjYW4NCiAgICAgICAgIC8vIGRldGVybWlu ZSB0aGUgY2F1c2UgYW5kIHJlaW50cm9kdWNlLg0KLSAgICAgICAgDQorDQogICAgICAgICAvL2Jv b2xlYW4gdXBncmFkZVJlcXVpcmVkID0gIWNoZWNrVmVyc2lvbihmaWxlVmVyc2lvbiwgcmVsZWFz ZVZlcnNpb24pDQogICAgICAgICBib29sZWFuIHVwZ3JhZGVSZXF1aXJlZCA9IHRydWU7DQotICAg ICAgICANCisNCiAgICAgICAgIC8vIFVwZ3JhZGUgaXMgaW4gdGhlIHdheSBmb3IgVU1MMiBwcm9q ZWN0cywgc28gd2UgdHVybiBpdCBvZmYgaW4gdGhhdCBjYXNlOg0KICAgICAgICAgaWYgKE1vZGVs LmdldEZhY2FkZSgpLmdldFVtbFZlcnNpb24oKS5jaGFyQXQoMCkgPT0gJzInKSB7DQogICAgICAg ICAgICAgdXBncmFkZVJlcXVpcmVkID0gZmFsc2U7DQogICAgICAgICB9DQotICAgICAgICANCi0g ICAgICAgIExPRy5pbmZvKCJMb2FkaW5nIHphcmdvIGZpbGUgb2YgdmVyc2lvbiAiICsgZmlsZVZl cnNpb24pOw0KLSAgICAgICAgDQorDQorICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJMb2Fk aW5nIHphcmdvIGZpbGUgb2YgdmVyc2lvbiB7MH0iLCBmaWxlVmVyc2lvbik7DQorDQogICAgICAg ICBmaW5hbCBQcm9qZWN0IHA7DQogICAgICAgICBpZiAodXBncmFkZVJlcXVpcmVkKSB7DQogICAg ICAgICAgICAgRmlsZSBjb21iaW5lZEZpbGUgPSB6YXJnb1RvVW1sKGZpbGUsIHByb2dyZXNzTWdy KTsNCkBAIC0yOTYsMjYgKzI5OCwyOSBAQA0KIA0KICAgICAgICAgICAgIExpc3QgbWVtYmVyTGlz dCA9IHBhcnNlci5nZXRNZW1iZXJMaXN0KCk7DQogDQotICAgICAgICAgICAgTE9HLmluZm8obWVt YmVyTGlzdC5zaXplKCkgKyAiIG1lbWJlcnMiKTsNCisgICAgICAgICAgICBMT0cubG9nKExldmVs LklORk8sbWVtYmVyTGlzdC5zaXplKCkgKyAiIG1lbWJlcnMiKTsNCiANCiAgICAgICAgICAgICAv LyBMb2FkIC54bWkgZmlsZSBiZWZvcmUgYW55IFBHTUwgZmlsZXMNCiAgICAgICAgICAgICAvLyBG SVhNRTogdGhlIGZvbGxvd2luZyBpcyBsb2FkaW5nIHRoZSBtb2RlbCBiZWZvcmUgYW55dGhpbmcg ZWxzZS4NCi0gICAgICAgICAgICAvLyBEdWUgdG8gdGhlIFphcmdvIGNvbnRhaW5pbmcgdGhlIHBy b2ZpbGVzLCBjdXJyZW50bHkgd2UgaGF2ZSANCi0gICAgICAgICAgICAvLyByZW1vdmVkIHRoaXMg aGFjayBpbiBVbWxGaWxlUGVyc2lzdGVyIGFuZCBJIHRoaW5rIGl0IHNob3VsZCBiZSANCisgICAg ICAgICAgICAvLyBEdWUgdG8gdGhlIFphcmdvIGNvbnRhaW5pbmcgdGhlIHByb2ZpbGVzLCBjdXJy ZW50bHkgd2UgaGF2ZQ0KKyAgICAgICAgICAgIC8vIHJlbW92ZWQgdGhpcyBoYWNrIGluIFVtbEZp bGVQZXJzaXN0ZXIgYW5kIEkgdGhpbmsgaXQgc2hvdWxkIGJlDQogICAgICAgICAgICAgLy8gcmVt b3ZlZCBmcm9tIGhlcmUgYWxzby4NCiAgICAgICAgICAgICBTdHJpbmcgeG1pRW50cnkgPSBnZXRF bnRyeU5hbWVzKGZpbGUsICIueG1pIikuaXRlcmF0b3IoKS5uZXh0KCk7DQogICAgICAgICAgICAg TWVtYmVyRmlsZVBlcnNpc3RlciBwZXJzaXN0ZXIgPSBnZXRNZW1iZXJGaWxlUGVyc2lzdGVyKCJ4 bWkiKTsNCiAgICAgICAgICAgICBVUkwgdXJsID0gbWFrZVppcEVudHJ5VXJsKHRvVVJMKGZpbGUp LCB4bWlFbnRyeSk7DQogICAgICAgICAgICAgcGVyc2lzdGVyLmxvYWQocCwgbmV3IElucHV0U291 cmNlKHVybC50b0V4dGVybmFsRm9ybSgpKSk7DQotICAgICAgICAgICAgDQorDQogICAgICAgICAg ICAgLy8gTG9hZCB0aGUgcmVzdA0KICAgICAgICAgICAgIExpc3Q8U3RyaW5nPiBlbnRyaWVzID0g Z2V0RW50cnlOYW1lcyhmaWxlLCBudWxsKTsNCiAgICAgICAgICAgICBmb3IgKFN0cmluZyBuYW1l IDogZW50cmllcykgew0KICAgICAgICAgICAgICAgICBTdHJpbmcgZXh0ID0gbmFtZS5zdWJzdHJp bmcobmFtZS5sYXN0SW5kZXhPZignLicpICsgMSk7DQogICAgICAgICAgICAgICAgIGlmICghImFy Z28iLmVxdWFscyhleHQpICYmICEieG1pIi5lcXVhbHMoZXh0KSkgew0KICAgICAgICAgICAgICAg ICAgICAgcGVyc2lzdGVyID0gZ2V0TWVtYmVyRmlsZVBlcnNpc3RlcihleHQpOw0KLSAgICAgICAg ICAgICAgICAgICAgTE9HLmluZm8oIkxvYWRpbmcgbWVtYmVyIHdpdGggIg0KKw0KKyAgICAgICAg ICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLA0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiTG9hZGluZyBtZW1iZXIgd2l0aCAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICsgcGVyc2lzdGVyLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsNCisNCiAgICAgICAgICAgICAgICAg ICAgIHVybCA9IG1ha2VaaXBFbnRyeVVybCh0b1VSTChmaWxlKSwgbmFtZSk7DQogICAgICAgICAg ICAgICAgICAgICBwZXJzaXN0ZXIubG9hZChwLCBuZXcgSW5wdXRTb3VyY2UodXJsLnRvRXh0ZXJu YWxGb3JtKCkpKTsNCiAgICAgICAgICAgICAgICAgfQ0KQEAgLTMzNSwyMSArMzQwLDIzIEBADQog ICAgICAgICAgICAgdGhyb3cgbmV3IE9wZW5FeGNlcHRpb24oZSk7DQogICAgICAgICB9DQogICAg IH0NCi0gICAgDQorDQogICAgIHByaXZhdGUgVVJMIHRvVVJMKEZpbGUgZmlsZSkgdGhyb3dzIE1h bGZvcm1lZFVSTEV4Y2VwdGlvbiB7DQotICAgICAgICByZXR1cm4gZmlsZS50b1VSSSgpLnRvVVJM KCk7ICAgICAgICANCisgICAgICAgIHJldHVybiBmaWxlLnRvVVJJKCkudG9VUkwoKTsNCiAgICAg fQ0KIA0KIA0KICAgICBwcml2YXRlIEZpbGUgemFyZ29Ub1VtbChGaWxlIGZpbGUsIFByb2dyZXNz TWdyIHByb2dyZXNzTWdyKQ0KICAgICAgICAgdGhyb3dzIE9wZW5FeGNlcHRpb24sIEludGVycnVw dGVkRXhjZXB0aW9uIHsNCi0gICAgICAgIA0KKw0KICAgICAgICAgRmlsZSBjb21iaW5lZEZpbGUg PSBudWxsOw0KICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICBjb21iaW5lZEZpbGUgPSBGaWxl LmNyZWF0ZVRlbXBGaWxlKCJjb21iaW5lZHphcmdvXyIsICIudW1sIik7DQotICAgICAgICAgICAg TE9HLmluZm8oDQotICAgICAgICAgICAgICAgICJDb21iaW5pbmcgb2xkIHN0eWxlIHphcmdvIHN1 YiBmaWxlcyBpbnRvIG5ldyBzdHlsZSB1bWwgZmlsZSAiDQotICAgICAgICAgICAgICAgICAgICAr IGNvbWJpbmVkRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk7DQorICAgICAgICAgICAgTE9HLmxvZyhM ZXZlbC5JTkZPLA0KKyAgICAgICAgICAgICAgICAgICAgIkNvbWJpbmluZyBvbGQgc3R5bGUgemFy Z28gc3ViIGZpbGVzICINCisgICAgICAgICAgICAgICAgICAgICsgImludG8gbmV3IHN0eWxlIHVt bCBmaWxlIHswfSIsDQorICAgICAgICAgICAgICAgICAgICBjb21iaW5lZEZpbGUuZ2V0QWJzb2x1 dGVQYXRoKCkpOw0KKw0KICAgICAgICAgICAgIGNvbWJpbmVkRmlsZS5kZWxldGVPbkV4aXQoKTsN CiANCiAgICAgICAgICAgICBTdHJpbmcgZW5jb2RpbmcgPSBBcmdvLmdldEVuY29kaW5nKCk7DQpA QCAtMzYwLDEzICszNjcsMTMgQEANCiANCiAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiPD94 bWwgdmVyc2lvbiA9IFwiMS4wXCIgIiArICJlbmNvZGluZyA9IFwiIg0KICAgICAgICAgICAgICAg ICAgICAgKyBlbmNvZGluZyArICJcIiA/PiIpOw0KLSAgICAgICAgICAgIA0KKw0KICAgICAgICAg ICAgIGNvcHlBcmdvKGZpbGUsIGVuY29kaW5nLCB3cml0ZXIpOw0KLSAgICAgICAgICAgIA0KKw0K ICAgICAgICAgICAgIHByb2dyZXNzTWdyLm5leHRQaGFzZSgpOw0KLSAgICAgICAgICAgIA0KKw0K ICAgICAgICAgICAgIGNvcHlNZW1iZXIoZmlsZSwgInByb2ZpbGUiLCBlbmNvZGluZywgd3JpdGVy KTsNCi0gICAgICAgICAgICANCisNCiAgICAgICAgICAgICBjb3B5WG1pKGZpbGUsIGVuY29kaW5n LCB3cml0ZXIpOw0KIA0KICAgICAgICAgICAgIGNvcHlEaWFncmFtcyhmaWxlLCBlbmNvZGluZywg d3JpdGVyKTsNCkBAIC0zNzUsMjMgKzM4MiwyMyBAQA0KICAgICAgICAgICAgIC8vIGFueSBtb2Rl bCBlbGVtZW50cyBvciBmaWdzIHRoYXQgdGhlIHRvZG8gaXRlbXMgcmVmZXIgdG8NCiAgICAgICAg ICAgICAvLyB3aWxsIGV4aXN0IGJlZm9yZSBjcmVhdGluZyBjcml0aWNzLg0KICAgICAgICAgICAg IGNvcHlNZW1iZXIoZmlsZSwgInRvZG8iLCBlbmNvZGluZywgd3JpdGVyKTsNCi0gICAgICAgICAg ICANCisNCiAgICAgICAgICAgICBwcm9ncmVzc01nci5uZXh0UGhhc2UoKTsNCi0gICAgICAgICAg ICANCisNCiAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiPC91bWw+Iik7DQogICAgICAgICAg ICAgd3JpdGVyLmNsb3NlKCk7DQotICAgICAgICAgICAgTE9HLmluZm8oIkNvbXBsZXRlZCBjb21i aW5pbmcgZmlsZXMiKTsNCisgICAgICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJDb21wbGV0 ZWQgY29tYmluaW5nIGZpbGVzIik7DQogICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7 DQogICAgICAgICAgICAgdGhyb3cgbmV3IE9wZW5FeGNlcHRpb24oZSk7DQogICAgICAgICB9DQog ICAgICAgICByZXR1cm4gY29tYmluZWRGaWxlOw0KICAgICB9DQogDQotICAgIA0KKw0KICAgICBw cml2YXRlIHZvaWQgY29weUFyZ28oRmlsZSBmaWxlLCBTdHJpbmcgZW5jb2RpbmcsIFByaW50V3Jp dGVyIHdyaXRlcikNCiAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgTWFsZm9ybWVkVVJMRXhj ZXB0aW9uLCBPcGVuRXhjZXB0aW9uLA0KICAgICAgICAgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2Vw dGlvbiB7DQotICAgICAgICANCisNCiAgICAgICAgIGludCBwZ21sQ291bnQgPSBnZXRQZ21sQ291 bnQoZmlsZSk7DQogICAgICAgICBib29sZWFuIGNvbnRhaW5zVG9EbyA9IGNvbnRhaW5zVG9kbyhm aWxlKTsNCiAgICAgICAgIGJvb2xlYW4gY29udGFpbnNQcm9maWxlID0gY29udGFpbnNQcm9maWxl KGZpbGUpOw0KQEAgLTM5OSwxNCArNDA2LDE0IEBADQogICAgICAgICAvLyBmaXJzdCByZWFkIHRo ZSAuYXJnbyBmaWxlIGZyb20gWmlwDQogICAgICAgICBaaXBJbnB1dFN0cmVhbSB6aXMgPQ0KICAg ICAgICAgICAgIG9wZW5aaXBTdHJlYW1BdCh0b1VSTChmaWxlKSwgRmlsZUNvbnN0YW50cy5QUk9K RUNUX0ZJTEVfRVhUKTsNCi0gICAgICAgIA0KKw0KICAgICAgICAgaWYgKHppcyA9PSBudWxsKSB7 DQogICAgICAgICAgICAgdGhyb3cgbmV3IE9wZW5FeGNlcHRpb24oDQogICAgICAgICAgICAgICAg ICAgICAiVGhlcmUgaXMgbm8gLmFyZ28gZmlsZSBpbiB0aGUgLnphcmdvIik7DQogICAgICAgICB9 DQotICAgICAgICANCisNCiAgICAgICAgIFN0cmluZyBsaW5lOw0KLSAgICAgICAgQnVmZmVyZWRS ZWFkZXIgcmVhZGVyID0gDQorICAgICAgICBCdWZmZXJlZFJlYWRlciByZWFkZXIgPQ0KICAgICAg ICAgICAgIG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoemlzLCBlbmNv ZGluZykpOw0KICAgICAgICAgLy8gS2VlcCByZWFkaW5nIHRpbGwgd2UgaGl0IHRoZSA8YXJnbz4g dGFnDQogICAgICAgICBTdHJpbmcgcm9vdExpbmU7DQpAQCAtNDIzLDE0ICs0MzAsMTQgQEANCiAg ICAgICAgIFN0cmluZyB2ZXJzaW9uID0gZ2V0VmVyc2lvbihyb290TGluZSk7DQogICAgICAgICB3 cml0ZXIucHJpbnRsbigiPHVtbCB2ZXJzaW9uPVwiIiArIHZlcnNpb24gKyAiXCI+Iik7DQogICAg ICAgICB3cml0ZXIucHJpbnRsbihyb290TGluZSk7DQotICAgICAgICBMT0cuaW5mbygiVHJhbnNm ZXJpbmcgYXJnbyBjb250ZW50cyIpOw0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLCAiVHJh bnNmZXJpbmcgYXJnbyBjb250ZW50cyIpOw0KICAgICAgICAgaW50IG1lbWJlckNvdW50ID0gMDsN CiAgICAgICAgIHdoaWxlICgobGluZSA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSBudWxsKSB7DQog ICAgICAgICAgICAgaWYgKGxpbmUudHJpbSgpLnN0YXJ0c1dpdGgoIjxtZW1iZXIiKSkgew0KICAg ICAgICAgICAgICAgICArK21lbWJlckNvdW50Ow0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAg ICBpZiAobGluZS50cmltKCkuZXF1YWxzKCI8L2FyZ28+IikgJiYgbWVtYmVyQ291bnQgPT0gMCkg ew0KLSAgICAgICAgICAgICAgICBMT0cuaW5mbygiSW5zZXJ0aW5nIG1lbWJlciBpbmZvIik7DQor ICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywgIkluc2VydGluZyBtZW1iZXIgaW5m byIpOw0KICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbigiPG1lbWJlciB0eXBlPSd4bWkn IG5hbWU9Jy54bWknIC8+Iik7DQogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg cGdtbENvdW50OyArK2kpIHsNCiAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8 bWVtYmVyIHR5cGU9J3BnbWwnIG5hbWU9Jy5wZ21sJyAvPiIpOw0KQEAgLTQ0Niw5ICs0NTMsOSBA QA0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbihsaW5lKTsNCiAg ICAgICAgIH0NCi0gICAgICAgIGlmIChMT0cuaXNJbmZvRW5hYmxlZCgpKSB7DQotICAgICAgICAg ICAgTE9HLmluZm8oIk1lbWJlciBjb3VudCA9ICIgKyBtZW1iZXJDb3VudCk7DQotICAgICAgICB9 DQorDQorICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJNZW1iZXIgY291bnQgPSB7MH0iLCBt ZW1iZXJDb3VudCk7DQorDQogICAgICAgICB6aXMuY2xvc2UoKTsNCiAgICAgICAgIHJlYWRlci5j bG9zZSgpOw0KICAgICB9DQpAQCAtNDY5LDEwICs0NzYsMTAgQEANCiAgICAgICAgIHJlYWRlci5j bG9zZSgpOw0KICAgICB9DQogDQotICAgIA0KKw0KICAgICBwcml2YXRlIHZvaWQgY29weURpYWdy YW1zKEZpbGUgZmlsZSwgU3RyaW5nIGVuY29kaW5nLCBQcmludFdyaXRlciB3cml0ZXIpDQogICAg ICAgICB0aHJvd3MgSU9FeGNlcHRpb24gew0KLSAgICAgICAgDQorDQogICAgICAgICAvLyBMb29w IHJvdW5kIGxvYWRpbmcgdGhlIGRpYWdyYW1zDQogICAgICAgICBaaXBJbnB1dFN0cmVhbSB6aXMg PSBuZXcgWmlwSW5wdXRTdHJlYW0odG9VUkwoZmlsZSkub3BlblN0cmVhbSgpKTsNCiAgICAgICAg IFN1YklucHV0U3RyZWFtIHN1YiA9IG5ldyBTdWJJbnB1dFN0cmVhbSh6aXMpOw0KQEAgLTQ5Miw3 ICs0OTksNyBAQA0KICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAg ICAgd3JpdGVyLnByaW50bG4oZmlyc3RMaW5lKTsNCiAgICAgICAgICAgICAgICAgfQ0KLSAgICAg ICAgICAgICAgICANCisNCiAgICAgICAgICAgICAgICAgcmVhZGVyVG9Xcml0ZXIocmVhZGVyLCB3 cml0ZXIpOw0KICAgICAgICAgICAgICAgICBzdWIuY2xvc2UoKTsNCiAgICAgICAgICAgICAgICAg cmVhZGVyLmNsb3NlKCk7DQpAQCAtNTAwLDE4ICs1MDcsMTggQEANCiAgICAgICAgIH0NCiAgICAg ICAgIHppcy5jbG9zZSgpOw0KICAgICB9DQotICAgIA0KLSAgICANCi0gICAgcHJpdmF0ZSB2b2lk IGNvcHlNZW1iZXIoRmlsZSBmaWxlLCBTdHJpbmcgdGFnLCBTdHJpbmcgb3V0cHV0RW5jb2Rpbmcs IA0KKw0KKw0KKyAgICBwcml2YXRlIHZvaWQgY29weU1lbWJlcihGaWxlIGZpbGUsIFN0cmluZyB0 YWcsIFN0cmluZyBvdXRwdXRFbmNvZGluZywNCiAgICAgICAgICAgICBQcmludFdyaXRlciB3cml0 ZXIpIHRocm93cyBJT0V4Y2VwdGlvbiwgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLA0KICAgICAgICAg ICAgICAgICBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIHsNCiANCiAgICAgICAgIFppcElu cHV0U3RyZWFtIHppcyA9IG9wZW5aaXBTdHJlYW1BdCh0b1VSTChmaWxlKSwgIi4iICsgdGFnKTsN Ci0gICAgICAgIA0KKw0KICAgICAgICAgaWYgKHppcyAhPSBudWxsKSB7DQogICAgICAgICAgICAg SW5wdXRTdHJlYW1SZWFkZXIgaXNyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKHppcywgb3V0cHV0 RW5jb2RpbmcpOw0KICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZm ZXJlZFJlYWRlcihpc3IpOw0KLSAgICAgICAgICAgIA0KKw0KICAgICAgICAgICAgIFN0cmluZyBm aXJzdExpbmUgPSByZWFkZXIucmVhZExpbmUoKTsNCiAgICAgICAgICAgICBpZiAoZmlyc3RMaW5l LnN0YXJ0c1dpdGgoIjw/eG1sIikpIHsNCiAgICAgICAgICAgICAgICAgLy8gU2tpcCB0aGUgMiBs aW5lcw0KQEAgLTUzNyw5ICs1NDQsOSBAQA0KICAgICAgICAgaW50IGNoOw0KICAgICAgICAgd2hp bGUgKChjaCA9IHJlYWRlci5yZWFkKCkpICE9IC0xKSB7DQogICAgICAgICAgICAgaWYgKGNoID09 IDB4RkZGRikgew0KLSAgICAgICAgICAgICAgICBMT0cuaW5mbygiU3RyaXBwaW5nIG91dCAweEZG RkYgZnJvbSBzYXZlIGZpbGUiKTsNCisgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZP LCAiU3RyaXBwaW5nIG91dCAweEZGRkYgZnJvbSBzYXZlIGZpbGUiKTsNCiAgICAgICAgICAgICB9 IGVsc2UgaWYgKGNoID09IDgpIHsNCi0gICAgICAgICAgICAgICAgTE9HLmluZm8oIlN0cmlwcGlu ZyBvdXQgMHg4IGZyb20gc2F2ZSBmaWxlIik7DQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2 ZWwuSU5GTywgIlN0cmlwcGluZyBvdXQgMHg4IGZyb20gc2F2ZSBmaWxlIik7DQogICAgICAgICAg ICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlKGNoKTsNCiAgICAgICAg ICAgICB9DQpAQCAtNTgyLDcgKzU4OSw3IEBADQogICAgICAgICBTdHJpbmcgZW50cnlVUkwgPSAi amFyOiIgKyB1cmwgKyAiIS8iICsgZW50cnlOYW1lOw0KICAgICAgICAgcmV0dXJuIG5ldyBVUkwo ZW50cnlVUkwpOw0KICAgICB9DQotICAgIA0KKw0KICAgICAvKioNCiAgICAgICogQSBzdHJlYW0g b2YgaW5wdXQgc3RyZWFtcyBmb3IgcmVhZGluZyB0aGUgWmlwcGVkIGZpbGUuDQogICAgICAqLw0K QEAgLTYyMCw3ICs2MjcsNyBAQA0KICAgICAgICAgICAgIHJldHVybiBpbi5nZXROZXh0RW50cnko KTsNCiAgICAgICAgIH0NCiAgICAgfQ0KLSAgICANCisNCiAgICAgcHJpdmF0ZSBpbnQgZ2V0UGdt bENvdW50KEZpbGUgZmlsZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsNCiAgICAgICAgIHJldHVybiBn ZXRFbnRyeU5hbWVzKGZpbGUsICIucGdtbCIpLnNpemUoKTsNCiAgICAgfQ0KQEAgLTYyOCwxOSAr NjM1LDE5IEBADQogICAgIHByaXZhdGUgYm9vbGVhbiBjb250YWluc1RvZG8oRmlsZSBmaWxlKSB0 aHJvd3MgSU9FeGNlcHRpb24gew0KICAgICAgICAgcmV0dXJuICFnZXRFbnRyeU5hbWVzKGZpbGUs ICIudG9kbyIpLmlzRW1wdHkoKTsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgcHJpdmF0ZSBib29s ZWFuIGNvbnRhaW5zUHJvZmlsZShGaWxlIGZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7DQogICAg ICAgICByZXR1cm4gIWdldEVudHJ5TmFtZXMoZmlsZSwgIi4iICsgUHJvZmlsZUNvbmZpZ3VyYXRp b24uRVhURU5TSU9OKQ0KICAgICAgICAgICAgICAgICAuaXNFbXB0eSgpOw0KICAgICB9DQotICAg IA0KKw0KICAgICAvKioNCiAgICAgICogR2V0IGEgbGlzdCBvZiB6aXAgZmlsZSBlbnRyaWVzIHdo aWNoIGVuZCB3aXRoIHRoZSBnaXZlbiBleHRlbnNpb24uDQogICAgICAqIElmIHRoZSBleHRlbnNp b24gaXMgbnVsbCwgYWxsIGVudHJpZXMgYXJlIHJldHVybmVkLg0KICAgICAgKi8NCiAgICAgcHJp dmF0ZSBMaXN0PFN0cmluZz4gZ2V0RW50cnlOYW1lcyhGaWxlIGZpbGUsIFN0cmluZyBleHRlbnNp b24pDQogICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiB7 DQotICAgICAgICANCisNCiAgICAgICAgIFppcElucHV0U3RyZWFtIHppcyA9IG5ldyBaaXBJbnB1 dFN0cmVhbSh0b1VSTChmaWxlKS5vcGVuU3RyZWFtKCkpOw0KICAgICAgICAgTGlzdDxTdHJpbmc+ IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOw0KICAgICAgICAgWmlwRW50cnkgZW50 cnkgPSB6aXMuZ2V0TmV4dEVudHJ5KCk7DQpAQCAtNjU0LDYgKzY2MSw2IEBADQogICAgICAgICB6 aXMuY2xvc2UoKTsNCiAgICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgIH0NCi0gICAgDQorDQog DQogfQ0KDQpNb2RpZmllZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9w ZXJzaXN0ZW5jZS9aaXBGaWxlUGVyc2lzdGVyLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGln cmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9v cmcvYXJnb3VtbC9wZXJzaXN0ZW5jZS9aaXBGaWxlUGVyc2lzdGVyLmphdmE/dmlldz1kaWZmJnBh dGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcGVyc2lzdGVuY2UvWmlwRmls ZVBlcnNpc3Rlci5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3Jj L29yZy9hcmdvdW1sL3BlcnNpc3RlbmNlL1ppcEZpbGVQZXJzaXN0ZXIuamF2YQkyMDEyLTEyLTMw IDA1OjA2OjAxLTA4MDANCkBAIC00NywxMSArNDcsMTIgQEANCiBpbXBvcnQgamF2YS5pby5JbnB1 dFN0cmVhbTsNCiBpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07DQogaW1wb3J0IGphdmEubmV0 LlVSTDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRp bC5sb2dnaW5nLkxvZ2dlcjsNCiBpbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsNCiBpbXBv cnQgamF2YS51dGlsLnppcC5aaXBJbnB1dFN0cmVhbTsNCiBpbXBvcnQgamF2YS51dGlsLnppcC5a aXBPdXRwdXRTdHJlYW07DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KIGlt cG9ydCBvcmcuYXJnb3VtbC5pMThuLlRyYW5zbGF0b3I7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmtl cm5lbC5Qcm9qZWN0Ow0KIGltcG9ydCBvcmcuYXJnb3VtbC5rZXJuZWwuUHJvamVjdEZhY3Rvcnk7 DQpAQCAtNzEsNyArNzIsNyBAQA0KICAgICAgKiBMb2dnZXIuDQogICAgICAqLw0KICAgICBwcml2 YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCi0gICAgICAgIExvZ2dlci5nZXRMb2dnZXIo WmlwRmlsZVBlcnNpc3Rlci5jbGFzcyk7DQorICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKFppcEZp bGVQZXJzaXN0ZXIuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgLyoqDQogICAgICAqIFRoZSBj b25zdHJ1Y3Rvci4NCkBAIC05Miw3ICs5Myw3IEBADQogICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0 RGVzYygpIHsNCiAgICAgICAgIHJldHVybiBUcmFuc2xhdG9yLmxvY2FsaXplKCJjb21ib2JveC5m aWxlZmlsdGVyLnppcCIpOw0KICAgICB9DQotICAgIA0KKw0KICAgICAvKg0KICAgICAgKiBAc2Vl IG9yZy5hcmdvdW1sLnBlcnNpc3RlbmNlLlhtaUZpbGVQZXJzaXN0ZXIjaXNTYXZlRW5hYmxlZCgp DQogICAgICAqLw0KQEAgLTExNSwxMiArMTE2LDEyIEBADQogICAgICAqLw0KICAgICBwdWJsaWMg dm9pZCBkb1NhdmUoUHJvamVjdCBwcm9qZWN0LCBGaWxlIGZpbGUpIHRocm93cyBTYXZlRXhjZXB0 aW9uIHsNCiANCi0gICAgICAgIExPRy5pbmZvKCJSZWNlaXZpbmcgZmlsZSAnIiArIGZpbGUuZ2V0 TmFtZSgpICsgIiciKTsNCi0gICAgICAgIA0KLSAgICAgICAgLyogUmV0YWluIHRoZSBwcmV2aW91 cyBwcm9qZWN0IGZpbGUgZXZlbiB3aGVuIHRoZSBzYXZlIG9wZXJhdGlvbiANCisgICAgICAgIExP Ry5sb2coTGV2ZWwuSU5GTywgIlJlY2VpdmluZyBmaWxlIHswfSIsIGZpbGUuZ2V0TmFtZSgpKTsN CisNCisgICAgICAgIC8qIFJldGFpbiB0aGUgcHJldmlvdXMgcHJvamVjdCBmaWxlIGV2ZW4gd2hl biB0aGUgc2F2ZSBvcGVyYXRpb24NCiAgICAgICAgICAqIGNyYXNoZXMgaW4gdGhlIG1pZGRsZS4g QWxzbyBjcmVhdGUgYSBiYWNrdXAgZmlsZSBhZnRlciBzYXZpbmcuICovDQogICAgICAgICBib29s ZWFuIGRvU2FmZVNhdmVzID0gdXNlU2FmZVNhdmVzKCk7DQotICAgICAgICANCisNCiAgICAgICAg IEZpbGUgbGFzdEFyY2hpdmVGaWxlID0gbmV3IEZpbGUoZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSAr ICJ+Iik7DQogICAgICAgICBGaWxlIHRlbXBGaWxlID0gbnVsbDsNCiANCkBAIC0xNTMsMTggKzE1 NCwxNyBAQA0KICAgICAgICAgICAgICAgICBQcm9qZWN0TWVtYmVyIHByb2plY3RNZW1iZXIgPQ0K ICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC5nZXRNZW1iZXJzKCkuZ2V0KGkpOw0KICAgICAg ICAgICAgICAgICBpZiAocHJvamVjdE1lbWJlci5nZXRUeXBlKCkuZXF1YWxzSWdub3JlQ2FzZSgi eG1pIikpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChMT0cuaXNJbmZvRW5hYmxlZCgpKSB7 DQotICAgICAgICAgICAgICAgICAgICAgICAgTE9HLmluZm8oIlNhdmluZyBtZW1iZXIgb2YgdHlw ZTogIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKHByb2plY3QuZ2V0TWVtYmVy cygpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldChpKSkuZ2V0VHlw ZSgpKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIExPRy5s b2coTGV2ZWwuRklORSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNhdmluZyBtZW1i ZXIgb2YgdHlwZTogezB9IiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdE1l bWJlci5nZXRUeXBlKCkpOw0KKw0KICAgICAgICAgICAgICAgICAgICAgTWVtYmVyRmlsZVBlcnNp c3RlciBwZXJzaXN0ZXINCiAgICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBNb2RlbE1lbWJl ckZpbGVQZXJzaXN0ZXIoKTsNCiAgICAgICAgICAgICAgICAgICAgIHBlcnNpc3Rlci5zYXZlKHBy b2plY3RNZW1iZXIsIGJ1ZmZlcmVkU3RyZWFtKTsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgICBzdHJlYW0uY2xvc2UoKTsNCi0gICAgICAgICAgICANCisN CiAgICAgICAgICAgICBpZiAoZG9TYWZlU2F2ZXMpIHsNCiAgICAgICAgICAgICAgICAgLy8gaWYg c2F2ZSBkaWQgbm90IHJhaXNlIGFuIGV4Y2VwdGlvbg0KICAgICAgICAgICAgICAgICAvLyBhbmQg bmFtZSsiIyIgZXhpc3RzIG1vdmUgbmFtZSsiIyIgdG8gbmFtZSsifiINCkBAIC0xODAsNyArMTgw LDcgQEANCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0gY2F0 Y2ggKEV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgTE9HLmVycm9yKCJFeGNlcHRpb24gb2Nj dXJlZCBkdXJpbmcgc2F2ZSBhdHRlbXB0IiwgZSk7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZl bC5TRVZFUkUsICJFeGNlcHRpb24gb2NjdXJlZCBkdXJpbmcgc2F2ZSBhdHRlbXB0IiwgZSk7DQog ICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgYnVmZmVyZWRTdHJlYW0uY2xvc2Uo KTsNCiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkgew0KQEAgLTIwMSw3ICsy MDEsNyBAQA0KICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICBidWZmZXJlZFN0cmVhbS5jbG9z ZSgpOw0KICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsNCi0gICAgICAgICAgICBM T0cuZXJyb3IoIkZhaWxlZCB0byBjbG9zZSBzYXZlIG91dHB1dCB3cml0ZXIiLCBleCk7DQorICAg ICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsICJGYWlsZWQgdG8gY2xvc2Ugc2F2ZSBvdXRw dXQgd3JpdGVyIiwgZXgpOw0KICAgICAgICAgfQ0KICAgICB9DQogDQpAQCAtMjExLDcgKzIxMSw3 IEBADQogICAgIHB1YmxpYyBQcm9qZWN0IGRvTG9hZChGaWxlIGZpbGUpDQogICAgICAgICB0aHJv d3MgT3BlbkV4Y2VwdGlvbiB7DQogDQotICAgICAgICBMT0cuaW5mbygiUmVjZWl2aW5nIGZpbGUg JyIgKyBmaWxlLmdldE5hbWUoKSArICInIik7DQorICAgICAgICBMT0cubG9nKExldmVsLklORk8s ICJSZWNlaXZpbmcgZmlsZSB7MH0iLCBmaWxlLmdldE5hbWUoKSk7DQogDQogICAgICAgICB0cnkg ew0KICAgICAgICAgICAgIFByb2plY3QgcCA9IFByb2plY3RGYWN0b3J5LmdldEluc3RhbmNlKCku Y3JlYXRlUHJvamVjdCgpOw0KQEAgLTIzMiw3ICsyMzIsNyBAQA0KIA0KICAgICAgICAgICAgIE1v ZGVsTWVtYmVyRmlsZVBlcnNpc3RlciBtb2RlbFBlcnNpc3RlciA9DQogICAgICAgICAgICAgICAg IG5ldyBNb2RlbE1lbWJlckZpbGVQZXJzaXN0ZXIoKTsNCi0gICAgICAgICAgICANCisNCiAgICAg ICAgICAgICBtb2RlbFBlcnNpc3Rlci5yZWFkTW9kZWxzKGlzKTsNCiAgICAgICAgICAgICAvLyBU T0RPIEhhbmRsZSBtdWx0aXBsZSB0b3AgbGV2ZWwgcGFja2FnZXMNCiAgICAgICAgICAgICBPYmpl Y3QgbW9kZWwgPSBtb2RlbFBlcnNpc3Rlci5nZXRDdXJNb2RlbCgpOw0KQEAgLTI3NSw3ICsyNzUs NyBAQA0KIA0KICAgICAvKioNCiAgICAgICogUmV0dXJucyBmYWxzZS4gT25seSBBcmdvIHNwZWNp ZmljIGZpbGVzIGhhdmUgYW4gaWNvbi4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBzZWUg b3JnLmFyZ291bWwucGVyc2lzdGVuY2UuQWJzdHJhY3RGaWxlUGVyc2lzdGVyI2hhc0FuSWNvbigp DQogICAgICAqLw0KICAgICBAT3ZlcnJpZGUNCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1s LWFwcC9zcmMvb3JnL2FyZ291bWwvcHJvZmlsZS9GaWxlTW9kZWxMb2FkZXIuamF2YQ0KVXJsOiBo dHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9zcmMv YXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUvRmlsZU1vZGVsTG9hZGVyLmphdmE/ dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcHJvZmls ZS9GaWxlTW9kZWxMb2FkZXIuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwt YXBwL3NyYy9vcmcvYXJnb3VtbC9wcm9maWxlL0ZpbGVNb2RlbExvYWRlci5qYXZhCTIwMTItMTIt MzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQogLyogJElkJA0KICAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVs b3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cN CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlp bmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhp cyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCkBAIC00Miw4ICs0Miw4IEBADQog aW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsNCiBpbXBvcnQgamF2YS5uZXQu VVJMOw0KIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCi0NCi1pbXBvcnQgb3JnLmFwYWNo ZS5sb2c0ai5Mb2dnZXI7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9y dCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQogLyoqDQogICogQW4gaW1wbGVtZW50YXRp b24gZm9yIHRoZSBQcm9maWxlTW9kZWxMb2FkZXIgdGhhdCBsb2FkcyBwcm9maWxlcyBmcm9tIGZp bGVzLg0KQEAgLTUyLDExICs1MiwxNCBAQA0KICAqLw0KIHB1YmxpYyBjbGFzcyBGaWxlTW9kZWxM b2FkZXIgZXh0ZW5kcyBVUkxNb2RlbExvYWRlciB7DQogDQotICAgIHByaXZhdGUgc3RhdGljIGZp bmFsIExvZ2dlciBMT0cgPSBMb2dnZXIuZ2V0TG9nZ2VyKEZpbGVNb2RlbExvYWRlci5jbGFzcyk7 DQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KKyAgICAgICAgTG9nZ2Vy LmdldExvZ2dlcihGaWxlTW9kZWxMb2FkZXIuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCi0gICAgcHVi bGljIENvbGxlY3Rpb24gbG9hZE1vZGVsKFByb2ZpbGVSZWZlcmVuY2UgcmVmZXJlbmNlKSANCisg ICAgcHVibGljIENvbGxlY3Rpb24gbG9hZE1vZGVsKFByb2ZpbGVSZWZlcmVuY2UgcmVmZXJlbmNl KQ0KICAgICAgICAgdGhyb3dzIFByb2ZpbGVFeGNlcHRpb24gew0KLSAgICAgICAgTE9HLmluZm8o IkxvYWRpbmcgcHJvZmlsZSBmcm9tIGZpbGUnIiArIHJlZmVyZW5jZS5nZXRQYXRoKCkgKyAiJyIp Ow0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLA0KKyAgICAgICAgICAgICAgICAiTG9hZGlu ZyBwcm9maWxlIGZyb20gZmlsZSB7MH0iLCByZWZlcmVuY2UuZ2V0UGF0aCgpKTsNCisNCiAgICAg ICAgIHRyeSB7DQogICAgICAgICAgICAgRmlsZSBtb2RlbEZpbGUgPSBuZXcgRmlsZShyZWZlcmVu Y2UuZ2V0UGF0aCgpKTsNCiAgICAgICAgICAgICBVUkwgdXJsID0gbW9kZWxGaWxlLnRvVVJJKCku dG9VUkwoKTsNCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291 bWwvcHJvZmlsZS9Qcm9maWxlRmFjYWRlLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlz Lm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcv YXJnb3VtbC9wcm9maWxlL1Byb2ZpbGVGYWNhZGUuamF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkw NyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3Jj L2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wcm9maWxlL1Byb2ZpbGVGYWNhZGUuamF2YQko b3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wcm9m aWxlL1Byb2ZpbGVGYWNhZGUuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYg KzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQg KGMpIDIwMDcsMjAxMCBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMp IDIwMDctMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2Vy dmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJl IG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGlj ZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBp cyBhdmFpbGFibGUgYXQNCkBAIC0zOSwyMiArMzksMjUgQEANCiANCiBwYWNrYWdlIG9yZy5hcmdv dW1sLnByb2ZpbGU7DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KK2ltcG9y dCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9n Z2VyOw0KKw0KIGltcG9ydCBvcmcuYXJnb3VtbC5rZXJuZWwuUHJvZmlsZUNvbmZpZ3VyYXRpb247 DQogaW1wb3J0IG9yZy5hcmdvdW1sLm1vZGVsLkludmFsaWRFbGVtZW50RXhjZXB0aW9uOw0KIA0K IC8qKg0KLSAqIFRoZSA8YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ZhY2Fk ZV9wYXR0ZXJuIj5GYWNhZGU8L2E+IG9mIHRoZSANCi0gKiBwcm9maWxlIHN1YnN5c3RlbS4gDQot ICogSXQgcHJvdmlkZXMgYSBzaW1wbGlmaWVkIGludGVyZmFjZSB0byB0aGUgc3Vic3lzdGVtLCBh bmQgYWNjZXNzIHRvIG9iamVjdHMgDQorICogVGhlIDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVk aWEub3JnL3dpa2kvRmFjYWRlX3BhdHRlcm4iPkZhY2FkZTwvYT4gb2YgdGhlDQorICogcHJvZmls ZSBzdWJzeXN0ZW0uDQorICogSXQgcHJvdmlkZXMgYSBzaW1wbGlmaWVkIGludGVyZmFjZSB0byB0 aGUgc3Vic3lzdGVtLCBhbmQgYWNjZXNzIHRvIG9iamVjdHMNCiAgKiBvZiB0aGUgc3Vic3lzdGVt IHdoZW4gdGhlIG1ldGhvZHMgaXQgcHJvdmlkZXMgZGlyZWN0bHkgYXJlbid0IGVub3VnaC4NCiAg Kg0KICAqIEBhdXRob3IgTHVpcyBTZXJnaW8gT2xpdmVpcmEgKGV1bHVpcykNCiAgKiBAc2luY2Ug MC4yNS40DQogICovDQogcHVibGljIGNsYXNzIFByb2ZpbGVGYWNhZGUgew0KLSAgICANCi0gICAg cHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoUHJvZmls ZUZhY2FkZS5jbGFzcyk7DQorDQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cg PQ0KKyAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihQcm9maWxlRmFjYWRlLmNsYXNzLmdldE5hbWUo KSk7DQogDQogICAgIC8qKg0KICAgICAgKiBSZWdpc3RlciBhIHByb2ZpbGUgaW4gdGhlIHtAbGlu ayBQcm9maWxlTWFuYWdlcn0uDQpAQCAtODMsNyArODYsNyBAQA0KICAgICB9DQogDQogICAgIHBy aXZhdGUgc3RhdGljIHZvaWQgbm90SW5pdGlhbGl6ZWQoU3RyaW5nIHN0cmluZykgew0KLSAgICAg ICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlByb2ZpbGVGYWNhZGUncyAiICsgc3RyaW5n ICANCisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJQcm9maWxlRmFjYWRlJ3Mg IiArIHN0cmluZw0KICAgICAgICAgICAgICAgICArICIgaXNuJ3QgaW5pdGlhbGl6ZWQhIik7DQog ICAgIH0NCiANCkBAIC0xMDUsMTIgKzEwOCwxMyBAQA0KICAgICAgICAgICAgICAgICB0cnkgew0K ICAgICAgICAgICAgICAgICAgICAgbWFuYWdlci5yZW1vdmVQcm9maWxlKHApOw0KICAgICAgICAg ICAgICAgICB9IGNhdGNoIChJbnZhbGlkRWxlbWVudEV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAg ICAgICAgICAgICBMT0cuZGVidWcoIkF0dGVtcHRlZCB0byBkZWxldGUgZXh0ZW50IHR3aWNlIGlu IHJlbW92ZUFsbFByb2ZpbGVzICIpOw0KKyAgICAgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZl bC5GSU5FLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXR0ZW1wdGVkIHRvIGRlbGV0 ZSBleHRlbnQgdHdpY2UuIik7DQogICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICB9DQog ICAgICAgICB9DQogICAgIH0NCi0gICAgDQorDQogICAgIC8qKg0KICAgICAgKiBSZXNldCBwcm9m aWxlIHN1YnN5c3RlbSB0byBpbml0aWFsIHN0YXRlIChwcmltYXJpbHkgZm9yIHRlc3RpbmcpLg0K ICAgICAgKi8NCkBAIC0xMzAsMTEgKzEzNCwxMSBAQA0KIA0KICAgICAvKioNCiAgICAgICogQXBw bGllcyB0aGUgZ2l2ZW4gUHJvZmlsZUNvbmZpZ3VyYXRpb24gdG8gQXJnb1VNTA0KLSAgICAgKiAN CisgICAgICoNCiAgICAgICogQHBhcmFtIHBjIHRoZSBwcm9maWxlIGNvbmZpZ3VyYXRpb24NCiAg ICAgICovDQogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhcHBseUNvbmZpZ3VyYXRpb24oUHJvZmls ZUNvbmZpZ3VyYXRpb24gcGMpIHsNCiAgICAgICAgIGdldE1hbmFnZXIoKS5hcHBseUNvbmZpZ3Vy YXRpb24ocGMpOw0KICAgICB9DQotICAgIA0KKw0KIH0NCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9h cmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcHJvZmlsZS9SZWFkZXJNb2RlbExvYWRlci5qYXZh DQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3Ry dW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcHJvZmlsZS9SZWFkZXJNb2RlbExv YWRlci5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdv dW1sL3Byb2ZpbGUvUmVhZGVyTW9kZWxMb2FkZXIuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsv c3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wcm9maWxlL1JlYWRlck1vZGVsTG9hZGVy LmphdmEJMjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMSw2ICsxLDYgQEANCiAvKiAkSWQk DQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA5IENvbnRyaWJ1 dG9ycyAtIHNlZSBiZWxvdw0KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEyIENvbnRyaWJ1dG9y cyAtIHNlZSBiZWxvdw0KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQg dGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAgKiB3aGljaCBh Y2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KQEAgLTQw LDMwICs0MCwzMSBAQA0KIA0KIGltcG9ydCBqYXZhLmlvLlJlYWRlcjsNCiBpbXBvcnQgamF2YS51 dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9y dCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGou TG9nZ2VyOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5tb2RlbC5Nb2RlbDsNCiBpbXBvcnQgb3JnLmFy Z291bWwubW9kZWwuVW1sRXhjZXB0aW9uOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5tb2RlbC5YbWlS ZWFkZXI7DQogaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOw0KIA0KIC8qKg0KLSAqIFRP RE86IHRoaXMgZG9lc24ndCBuZWVkIGEgZnVsbCBQcm9maWxlUmVmZXJlbmNlIHNpbmNlIGl0IHVz ZXMgdGhlIA0KLSAqIHJlYWRlciBoYW5kZWQgaW4gdGhlIGNvbnN0cnVjdG9yLiBJdCBkb2Vzbid0 IG1ha2UgbXVjaCBzZW5zZSB0byBtYWtlIA0KLSAqIGl0cyBjYWxsZXJzIGluaXQgdGhlIHBhdGgg dG8gc29tZSBuYW1lIHdoaWNoIGl0IGRvZXNuJ3QgbmVlZC4uLiANCisgKiBUT0RPOiB0aGlzIGRv ZXNuJ3QgbmVlZCBhIGZ1bGwgUHJvZmlsZVJlZmVyZW5jZSBzaW5jZSBpdCB1c2VzIHRoZQ0KKyAq IHJlYWRlciBoYW5kZWQgaW4gdGhlIGNvbnN0cnVjdG9yLiBJdCBkb2Vzbid0IG1ha2UgbXVjaCBz ZW5zZSB0byBtYWtlDQorICogaXRzIGNhbGxlcnMgaW5pdCB0aGUgcGF0aCB0byBzb21lIG5hbWUg d2hpY2ggaXQgZG9lc24ndCBuZWVkLi4uDQogICoNCiAgKiBAYXV0aG9yIEx1aXMgU2VyZ2lvIE9s aXZlaXJhIChldWx1aXMpDQogICovDQogcHVibGljIGNsYXNzIFJlYWRlck1vZGVsTG9hZGVyIGlt cGxlbWVudHMgUHJvZmlsZU1vZGVsTG9hZGVyIHsNCiANCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmlu YWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoDQotICAgICAgICAgICAgUmVhZGVyTW9k ZWxMb2FkZXIuY2xhc3MpOw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0N CisgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoUmVhZGVyTW9kZWxMb2FkZXIuY2xhc3MuZ2V0TmFt ZSgpKTsNCiANCiAgICAgcHJpdmF0ZSBSZWFkZXIgcmVhZGVyOw0KIA0KICAgICAvKioNCiAgICAg ICogQ3JlYXRlIGEgTW9kZWxMb2FkZXIgdGhhdCB3aWxsIGxvYWQgdGhlIG1vZGVsIGZyb20gdGhl IGdpdmVuIHJlYWRlci4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSB0aGVSZWFk ZXIgUmVhZGVyIGZyb20gd2hpY2ggdGhlIG1vZGVsIHdpbGwgYmUgbG9hZGVkLg0KICAgICAgKi8N CiAgICAgcHVibGljIFJlYWRlck1vZGVsTG9hZGVyKFJlYWRlciB0aGVSZWFkZXIpIHsNCkBAIC03 MSwxNyArNzIsMTcgQEANCiAgICAgfQ0KIA0KIA0KLSAgICAvKiANCisgICAgLyoNCiAgICAgICog QHNlZSBQcm9maWxlTW9kZWxMb2FkZXIjbG9hZE1vZGVsKFByb2ZpbGVSZWZlcmVuY2UpDQogICAg ICAqLw0KLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBsb2FkTW9kZWwoUHJvZmlsZVJlZmVyZW5jZSBy ZWZlcmVuY2UpIA0KKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBsb2FkTW9kZWwoUHJvZmlsZVJlZmVy ZW5jZSByZWZlcmVuY2UpDQogICAgICAgICB0aHJvd3MgUHJvZmlsZUV4Y2VwdGlvbiB7DQotICAg ICAgICANCisNCiAgICAgICAgIGlmIChyZWFkZXIgPT0gbnVsbCkgew0KLSAgICAgICAgICAgIExP Ry5lcnJvcigiUHJvZmlsZSBub3QgZm91bmQiKTsNCisgICAgICAgICAgICBMT0cubG9nKExldmVs LlNFVkVSRSwgIlByb2ZpbGUgbm90IGZvdW5kIik7DQogICAgICAgICAgICAgdGhyb3cgbmV3IFBy b2ZpbGVFeGNlcHRpb24oIlByb2ZpbGUgbm90IGZvdW5kISIpOw0KICAgICAgICAgfQ0KLSAgICAg ICAgDQorDQogICAgICAgICB0cnkgew0KICAgICAgICAgICAgIFhtaVJlYWRlciB4bWlSZWFkZXIg PSBNb2RlbC5nZXRYbWlSZWFkZXIoKTsNCiAgICAgICAgICAgICBJbnB1dFNvdXJjZSBpbnB1dFNv dXJjZSA9IG5ldyBJbnB1dFNvdXJjZShyZWFkZXIpOw0KDQpNb2RpZmllZDogdHJ1bmsvc3JjL2Fy Z291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wcm9maWxlL1Jlc291cmNlTW9kZWxMb2FkZXIuamF2 YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90 cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUvUmVzb3VyY2VNb2Rl bExvYWRlci5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9h cmdvdW1sL3Byb2ZpbGUvUmVzb3VyY2VNb2RlbExvYWRlci5qYXZhCShvcmlnaW5hbCkNCisrKyB0 cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUvUmVzb3VyY2VNb2Rl bExvYWRlci5qYXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQog LyogJElkJA0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBD b250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiBDb250 cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dy YW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZhaWxhYmxl IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQogICog d2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQN CkBAIC0zOSw4ICszOSw4IEBADQogcGFja2FnZSBvcmcuYXJnb3VtbC5wcm9maWxlOw0KIA0KIGlt cG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCi0NCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5M b2dnZXI7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0 aWwubG9nZ2luZy5Mb2dnZXI7DQogDQogLyoqDQogICogTG9hZHMgbW9kZWxzIHVzaW5nIHRoZSBk ZWZhdWx0IENsYXNzTG9hZGVyIG9yIGEgcHJvdmlkZWQgb25lLg0KQEAgLTUyLDMzICs1MiwzMyBA QA0KICAgICAvKioNCiAgICAgICogTG9nZ2VyLg0KICAgICAgKi8NCi0gICAgcHJpdmF0ZSBzdGF0 aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlcg0KLSAgICAgICAgICAgIC5nZXRMb2dnZXIoUmVz b3VyY2VNb2RlbExvYWRlci5jbGFzcyk7DQotICAgIA0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5h bCBMb2dnZXIgTE9HID0gTG9nZ2VyLmdldExvZ2dlcihSZXNvdXJjZU1vZGVsTG9hZGVyLmNsYXNz LmdldE5hbWUoKSk7DQorDQogICAgIHByaXZhdGUgQ2xhc3MgY2xheno7DQotICAgIA0KKw0KICAg ICAvKioNCi0gICAgICogVGhlIGRlZmF1bHQgY29uc3RydWN0b3IgZm9yIHRoaXMgY2xhc3MuIExv YWRzIHJlc291cmNlcyBmcm9tIHRoZSBzYW1lIA0KKyAgICAgKiBUaGUgZGVmYXVsdCBjb25zdHJ1 Y3RvciBmb3IgdGhpcyBjbGFzcy4gTG9hZHMgcmVzb3VyY2VzIGZyb20gdGhlIHNhbWUNCiAgICAg ICogQ2xhc3NMb2FkZXIgdGhhdCBsb2FkZWQgdGhpcyBjbGFzcy4NCiAgICAgICovDQogICAgIHB1 YmxpYyBSZXNvdXJjZU1vZGVsTG9hZGVyKCkgew0KICAgICAgICAgdGhpcy5jbGF6eiA9IHRoaXMu Z2V0Q2xhc3MoKTsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIExvYWRzIHJl c291cmNlcyBmcm9tIHRoZSBDbGFzc0xvYWRlciB0aGF0IGxvYWRlZCB0aGUgZ2l2ZW4gY2xhc3MN Ci0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBjIHRoZSByZWZlcmVuY2UgY2xhc3MN CiAgICAgICovDQogICAgIHB1YmxpYyBSZXNvdXJjZU1vZGVsTG9hZGVyKENsYXNzIGMpIHsNCiAg ICAgICAgIGNsYXp6ID0gYzsNCiAgICAgfQ0KIA0KLSAgICANCi0gICAgcHVibGljIENvbGxlY3Rp b24gbG9hZE1vZGVsKFByb2ZpbGVSZWZlcmVuY2UgcmVmZXJlbmNlKSANCisNCisgICAgcHVibGlj IENvbGxlY3Rpb24gbG9hZE1vZGVsKFByb2ZpbGVSZWZlcmVuY2UgcmVmZXJlbmNlKQ0KICAgICAg ICAgdGhyb3dzIFByb2ZpbGVFeGNlcHRpb24gew0KLSAgICAgICAgTE9HLmluZm8oIkxvYWRpbmcg cHJvZmlsZSBmcm9tIHJlc291cmNlJyIgKyByZWZlcmVuY2UuZ2V0UGF0aCgpICsgIiciKTsNCi0g ICAgICAgIHJldHVybiBzdXBlci5sb2FkTW9kZWwoY2xhenouZ2V0UmVzb3VyY2UocmVmZXJlbmNl LmdldFBhdGgoKSksIA0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLCAiTG9hZGluZyBwcm9m aWxlIGZyb20gcmVzb3VyY2UgezB9IiwgcmVmZXJlbmNlLmdldFBhdGgoKSk7DQorDQorICAgICAg ICByZXR1cm4gc3VwZXIubG9hZE1vZGVsKGNsYXp6LmdldFJlc291cmNlKHJlZmVyZW5jZS5nZXRQ YXRoKCkpLA0KICAgICAgICAgICAgIHJlZmVyZW5jZS5nZXRQdWJsaWNSZWZlcmVuY2UoKSk7DQog ICAgIH0NCiANCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291 bWwvcHJvZmlsZS9TdHJlYW1Nb2RlbExvYWRlci5qYXZhDQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRp Z3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMv b3JnL2FyZ291bWwvcHJvZmlsZS9TdHJlYW1Nb2RlbExvYWRlci5qYXZhP3ZpZXc9ZGlmZiZwYXRo cmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0 cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUvU3RyZWFtTW9kZWxM b2FkZXIuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcv YXJnb3VtbC9wcm9maWxlL1N0cmVhbU1vZGVsTG9hZGVyLmphdmEJMjAxMi0xMi0zMCAwNTowNjow MS0wODAwDQpAQCAtMSw2ICsxLDYgQEANCiAvKiAkSWQkDQogICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq DQotICogQ29weXJpZ2h0IChjKSAyMDA5IENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KKyAqIENv cHlyaWdodCAoYykgMjAwOS0yMDEyIENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KICAqIEFsbCBy aWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlh bHMNCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNl IFB1YmxpYyBMaWNlbnNlIHYxLjANCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1 dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KQEAgLTQxLDggKzQxLDkgQEANCiBpbXBvcnQgamF2 YS5pby5JbnB1dFN0cmVhbTsNCiBpbXBvcnQgamF2YS5uZXQuVVJMOw0KIGltcG9ydCBqYXZhLnV0 aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0 IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5M b2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLm1vZGVsLk1vZGVsOw0KIGltcG9ydCBvcmcuYXJn b3VtbC5tb2RlbC5VbWxFeGNlcHRpb247DQogaW1wb3J0IG9yZy5hcmdvdW1sLm1vZGVsLlhtaVJl YWRlcjsNCkBAIC01NSw3ICs1Niw4IEBADQogICovDQogcHVibGljIGFic3RyYWN0IGNsYXNzIFN0 cmVhbU1vZGVsTG9hZGVyIGltcGxlbWVudHMgUHJvZmlsZU1vZGVsTG9hZGVyIHsNCiANCi0gICAg cHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoU3RyZWFt TW9kZWxMb2FkZXIuY2xhc3MpOw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9H ID0NCisgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoU3RyZWFtTW9kZWxMb2FkZXIuY2xhc3MuZ2V0 TmFtZSgpKTsNCiANCiANCiANCkBAIC02OCwxMiArNzAsMTIgQEANCiAgICAgICovDQogICAgIHB1 YmxpYyBDb2xsZWN0aW9uIGxvYWRNb2RlbChJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSwgVVJMIHB1 YmxpY1JlZmVyZW5jZSkNCiAgICAgICAgIHRocm93cyBQcm9maWxlRXhjZXB0aW9uIHsNCi0gICAg ICAgIA0KKw0KICAgICAgICAgaWYgKGlucHV0U3RyZWFtID09IG51bGwpIHsNCi0gICAgICAgICAg ICBMT0cuZXJyb3IoIlByb2ZpbGUgbm90IGZvdW5kIik7DQorICAgICAgICAgICAgTE9HLmxvZyhM ZXZlbC5TRVZFUkUsICJQcm9maWxlIG5vdCBmb3VuZCIpOw0KICAgICAgICAgICAgIHRocm93IG5l dyBQcm9maWxlRXhjZXB0aW9uKCJQcm9maWxlIG5vdCBmb3VuZCEiKTsNCiAgICAgICAgIH0NCi0g ICAgICAgIA0KKw0KICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICBYbWlSZWFkZXIgeG1pUmVh ZGVyID0gTW9kZWwuZ2V0WG1pUmVhZGVyKCk7DQogICAgICAgICAgICAgSW5wdXRTb3VyY2UgaW5w dXRTb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UoaW5wdXRTdHJlYW0pOw0KDQpNb2RpZmllZDogdHJ1 bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wcm9maWxlL1VzZXJEZWZpbmVkUHJv ZmlsZS5qYXZhDQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9h cmdvdW1sL3RydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcHJvZmlsZS9Vc2Vy RGVmaW5lZFByb2ZpbGUuamF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0x OTkwNw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3Ny Yy9vcmcvYXJnb3VtbC9wcm9maWxlL1VzZXJEZWZpbmVkUHJvZmlsZS5qYXZhCShvcmlnaW5hbCkN CisrKyB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUvVXNlckRl ZmluZWRQcm9maWxlLmphdmEJMjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMSw2ICsxLDYg QEANCiAvKiAkSWQkDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAy MDA3LDIwMTAgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA3 LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4g VGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRl IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ug djEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZh aWxhYmxlIGF0DQpAQCAtNTUsMTAgKzU1LDExIEBADQogaW1wb3J0IGphdmEudXRpbC5NYXA7DQog aW1wb3J0IGphdmEudXRpbC5TZXQ7DQogaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7 DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9n Z2luZy5Mb2dnZXI7DQogDQogaW1wb3J0IGphdmF4LnN3aW5nLkltYWdlSWNvbjsNCiANCi1pbXBv cnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmNvZ25pdGl2 ZS5Dcml0aWM7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5EZWNpc2lvbjsNCiBpbXBv cnQgb3JnLmFyZ291bWwuY29nbml0aXZlLlRvRG9JdGVtOw0KQEAgLTcwLDggKzcxLDggQEANCiBp bXBvcnQgb3JnLmFyZ291bWwudW1sLmNvZ25pdGl2ZS5VTUxEZWNpc2lvbjsNCiANCiAvKioNCi0g KiBSZXByZXNlbnRzIGEgcHJvZmlsZSBkZWZpbmVkIGJ5IHRoZSB1c2VyDQotICogDQorICogUmVw cmVzZW50cyBhIHByb2ZpbGUgZGVmaW5lZCBieSB0aGUgdXNlci4NCisgKg0KICAqIEBhdXRob3Ig bWF1cmVsaW8xMjM0DQogICovDQogcHVibGljIGNsYXNzIFVzZXJEZWZpbmVkUHJvZmlsZSBleHRl bmRzIFByb2ZpbGUgew0KQEAgLTc5LDggKzgwLDggQEANCiAgICAgLyoqDQogICAgICAqIExvZ2dl ci4NCiAgICAgICovDQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dn ZXINCi0gICAgICAgICAgICAuZ2V0TG9nZ2VyKFVzZXJEZWZpbmVkUHJvZmlsZS5jbGFzcyk7DQor ICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KKyAgICAgICAgTG9nZ2VyLmdl dExvZ2dlcihVc2VyRGVmaW5lZFByb2ZpbGUuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgcHJp dmF0ZSBTdHJpbmcgZGlzcGxheU5hbWU7DQogDQpAQCAtODksMTEgKzkwLDExIEBADQogICAgIHBy aXZhdGUgQ29sbGVjdGlvbiBwcm9maWxlUGFja2FnZXMgPSBudWxsOw0KICAgICBwcml2YXRlIE9i amVjdCBwYWNrYWdlTG9jayA9IG5ldyBPYmplY3QoKTsNCiANCi0gICAgcHJpdmF0ZSBVc2VyRGVm aW5lZEZpZ05vZGVTdHJhdGVneSBmaWdOb2RlU3RyYXRlZ3kgDQorICAgIHByaXZhdGUgVXNlckRl ZmluZWRGaWdOb2RlU3RyYXRlZ3kgZmlnTm9kZVN0cmF0ZWd5DQogICAgICAgICA9IG5ldyBVc2Vy RGVmaW5lZEZpZ05vZGVTdHJhdGVneSgpOw0KIA0KICAgICBwcml2YXRlIFByb2ZpbGVSZWZlcmVu Y2UgcmVmZXJlbmNlOw0KLSAgICANCisNCiAgICAgcHJpdmF0ZSBQcm9maWxlTWFuYWdlciBwcm9m aWxlTWFuYWdlcjsNCiANCiAgICAgcHJpdmF0ZSBib29sZWFuIGNyaXRpY3NMb2FkZWQgPSBmYWxz ZTsNCkBAIC0xMDgsNyArMTA5LDcgQEANCiANCiAgICAgICAgIC8qKg0KICAgICAgICAgICogQWRk cyBhIG5ldyBkZXNjcmlwdG9yIHRvIHRoaXMgc3RyYXRlZ3kNCi0gICAgICAgICAqIA0KKyAgICAg ICAgICoNCiAgICAgICAgICAqIEBwYXJhbSBmbmQNCiAgICAgICAgICAqLw0KICAgICAgICAgcHVi bGljIHZvaWQgYWRkRGVzcmNpcHRvcihGaWdOb2RlRGVzY3JpcHRvciBmbmQpIHsNCkBAIC0xMzUs MTYgKzEzNiwxNyBAQA0KIA0KICAgICAvKioNCiAgICAgICogVGhlIGRlZmF1bHQgY29uc3RydWN0 b3IgZm9yIHRoaXMgY2xhc3MNCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBmaWxl IHRoZSBmaWxlIGZyb20gd2hlcmUgdGhlIG1vZGVsIHNob3VsZCBiZSByZWFkDQogICAgICAqIEBw YXJhbSBtYW5hZ2VyIHRoZSBwcm9maWxlIG1hbmFnZXIgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHJl c29sdmUNCi0gICAgICogICAgICAgIGRlcGVuZGVuY2llcyANCisgICAgICogICAgICAgIGRlcGVu ZGVuY2llcw0KICAgICAgKiBAdGhyb3dzIFByb2ZpbGVFeGNlcHRpb24gaWYgdGhlIHByb2ZpbGUg Y291bGQgbm90IGJlIGxvYWRlZA0KICAgICAgKi8NCiAgICAgcHVibGljIFVzZXJEZWZpbmVkUHJv ZmlsZShGaWxlIGZpbGUsIFByb2ZpbGVNYW5hZ2VyIG1hbmFnZXIpDQogICAgICAgICB0aHJvd3Mg UHJvZmlsZUV4Y2VwdGlvbiB7DQogDQotICAgICAgICBMT0cuaW5mbygibG9hZCAiICsgZmlsZSk7 DQorICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJsb2FkIHswfSIsIGZpbGUpOw0KKw0KICAg ICAgICAgZGlzcGxheU5hbWUgPSBmaWxlLmdldE5hbWUoKTsNCiAgICAgICAgIG1vZGVsRmlsZSA9 IGZpbGU7DQogICAgICAgICB0cnkgew0KQEAgLTE1OCw3ICsxNjAsNyBAQA0KIA0KICAgICAvKioN CiAgICAgICogVGhlIGRlZmF1bHQgY29uc3RydWN0b3IgZm9yIHRoaXMgY2xhc3MNCi0gICAgICog DQorICAgICAqDQogICAgICAqIEBwYXJhbSBmaWxlIHRoZSBmaWxlIGZyb20gd2hlcmUgdGhlIG1v ZGVsIHNob3VsZCBiZSByZWFkDQogICAgICAqIEB0aHJvd3MgUHJvZmlsZUV4Y2VwdGlvbiBpZiB0 aGUgcHJvZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkDQogICAgICAqIEBkZXByZWNhdGVkIGZvciAw LjMwIGJ5IGV1bHVpcy4gVXNlDQpAQCAtMTY5LDcgKzE3MSw3IEBADQogICAgIHB1YmxpYyBVc2Vy RGVmaW5lZFByb2ZpbGUoRmlsZSBmaWxlKSB0aHJvd3MgUHJvZmlsZUV4Y2VwdGlvbiB7DQogICAg ICAgICB0aGlzKGZpbGUsIGdldFNvbWVQcm9maWxlTWFuYWdlcigpKTsNCiAgICAgfQ0KLSAgICAN CisNCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTnVsbFByb2ZpbGVNYW5hZ2VyIGltcGxlbWVu dHMgUHJvZmlsZU1hbmFnZXIgew0KIA0KICAgICAgICAgcHVibGljIHZvaWQgYWRkU2VhcmNoUGF0 aERpcmVjdG9yeShTdHJpbmcgcGF0aCkgew0KQEAgLTIxOSwxMiArMjIxLDEyIEBADQogDQogICAg ICAgICBwdWJsaWMgdm9pZCByZW1vdmVTZWFyY2hQYXRoRGlyZWN0b3J5KFN0cmluZyBwYXRoKSB7 DQogICAgICAgICB9DQotICAgICAgICANCisNCiAgICAgfQ0KIA0KICAgICAvKioNCiAgICAgICog QSBjb25zdHJ1Y3RvciB0aGF0IHJlYWRzIGEgZmlsZSBmcm9tIGFuIFVSTA0KLSAgICAgKiANCisg ICAgICoNCiAgICAgICogQHBhcmFtIHVybCB0aGUgVVJMDQogICAgICAqIEBwYXJhbSBtYW5hZ2Vy IHRoZSBwcm9maWxlIG1hbmFnZXIgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHJlc29sdmUNCiAgICAg ICogICAgICAgIGRlcGVuZGVuY2llcw0KQEAgLTIzMywxNCArMjM1LDE1IEBADQogICAgIHB1Ymxp YyBVc2VyRGVmaW5lZFByb2ZpbGUoVVJMIHVybCwgUHJvZmlsZU1hbmFnZXIgbWFuYWdlcikNCiAg ICAgICAgIHRocm93cyBQcm9maWxlRXhjZXB0aW9uIHsNCiANCi0gICAgICAgIExPRy5pbmZvKCJs b2FkICIgKyB1cmwpOw0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLCAibG9hZCB7MH0iLCB1 cmwpOw0KKw0KICAgICAgICAgcmVmZXJlbmNlID0gbmV3IFVzZXJQcm9maWxlUmVmZXJlbmNlKHVy bC5nZXRQYXRoKCksIHVybCk7DQogICAgICAgICBwcm9maWxlTWFuYWdlciA9IG1hbmFnZXI7DQog ICAgIH0NCiANCiAgICAgLyoqDQogICAgICAqIEEgY29uc3RydWN0b3IgdGhhdCByZWFkcyBhIGZp bGUgZnJvbSBhbiBVUkwNCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSB1cmwgdGhl IFVSTA0KICAgICAgKiBAdGhyb3dzIFByb2ZpbGVFeGNlcHRpb24gaWYgdGhlIHByb2ZpbGUgY291 bGQgbm90IGJlIGxvYWRlZA0KICAgICAgKiBAZGVwcmVjYXRlZCBmb3IgMC4zMCBieSBldWx1aXMu IFVzZQ0KQEAgLTI1MywxMCArMjU2LDEwIEBADQogICAgIH0NCiANCiAgICAgLyoqDQotICAgICAq IEEgY29uc3RydWN0b3IgdGhhdCByZWFkcyBhIGZpbGUgZnJvbSBhbiBVUkwgYXNzb2NpYXRlZCB3 aXRoIHNvbWUgDQotICAgICAqIHByb2ZpbGVzLiAgRGVzaWduZWQgZm9yIHVzZSB3aXRoIFVSTHMg d2hpY2ggcmVwcmVzZW50IGVudHJpZXMgaW4gYSANCisgICAgICogQSBjb25zdHJ1Y3RvciB0aGF0 IHJlYWRzIGEgZmlsZSBmcm9tIGFuIFVSTCBhc3NvY2lhdGVkIHdpdGggc29tZQ0KKyAgICAgKiBw cm9maWxlcy4gIERlc2lnbmVkIGZvciB1c2Ugd2l0aCBVUkxzIHdoaWNoIHJlcHJlc2VudCBlbnRy aWVzIGluIGENCiAgICAgICogSkFSIG9yIFppcCBmaWxlLg0KLSAgICAgKiANCisgICAgICoNCiAg ICAgICogQHBhcmFtIGRuIHRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHByb2ZpbGUNCiAgICAgICog QHBhcmFtIHVybCB0aGUgVVJMIG9mIHRoZSBwcm9maWxlIG1vZGUNCiAgICAgICogQHBhcmFtIGNy aXRpY3MgdGhlIENyaXRpY3MgZGVmaW5lZCBieSB0aGlzIHByb2ZpbGUNCkBAIC0yNjksNyArMjcy LDcgQEANCiAgICAgICAgICAgICBTZXQ8U3RyaW5nPiBkZXBlbmRlbmNpZXMsIFByb2ZpbGVNYW5h Z2VyIG1hbmFnZXIpDQogICAgICAgICB0aHJvd3MgUHJvZmlsZUV4Y2VwdGlvbiB7DQogDQotICAg ICAgICBMT0cuaW5mbygibG9hZCAiICsgdXJsKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuSU5G TywgImxvYWQgezB9IiwgdXJsKTsNCiANCiAgICAgICAgIHRoaXMuZGlzcGxheU5hbWUgPSBkbjsN CiAgICAgICAgIHJlZmVyZW5jZSA9IG5ldyBVc2VyUHJvZmlsZVJlZmVyZW5jZSh1cmwuZ2V0UGF0 aCgpLCB1cmwpOw0KQEAgLTI4NCwxMyArMjg3LDEzIEBADQogDQogICAgIC8qKg0KICAgICAgKiBB IGNvbnN0cnVjdG9yIHRoYXQgcmVhZHMgYSBmaWxlIGZyb20gYW4gVVJMIGFzc29jaWF0ZWQgd2l0 aCBzb21lIHByb2ZpbGVzDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAcGFyYW0gZG4gdGhl IGRpc3BsYXkgbmFtZSBvZiB0aGUgcHJvZmlsZQ0KICAgICAgKiBAcGFyYW0gdXJsIHRoZSBVUkwg b2YgdGhlIHByb2ZpbGUgbW9kZQ0KICAgICAgKiBAcGFyYW0gY3JpdGljcyB0aGUgQ3JpdGljcyBk ZWZpbmVkIGJ5IHRoaXMgcHJvZmlsZQ0KICAgICAgKiBAcGFyYW0gZGVwZW5kZW5jaWVzIHRoZSBk ZXBlbmRlbmNpZXMgb2YgdGhpcyBwcm9maWxlDQogICAgICAqIEB0aHJvd3MgUHJvZmlsZUV4Y2Vw dGlvbiBpZiB0aGUgbW9kZWwgY2Fubm90IGJlIGxvYWRlZA0KLSAgICAgKiANCisgICAgICoNCiAg ICAgICogQGRlcHJlY2F0ZWQgZm9yIDAuMzAgYnkgZXVsdWlzLiBVc2UNCiAgICAgICoge0BsaW5r IFVzZXJEZWZpbmVkUHJvZmlsZSNVc2VyRGVmaW5lZFByb2ZpbGUoDQogICAgICAqIFN0cmluZywg VVJMLCBTZXQsIFNldCwgUHJvZmlsZU1hbmFnZXIpfQ0KQEAgLTMyNiw4ICszMjksOSBAQA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmxvYWRNb2RlbChyZWZlcmVuY2UpOw0KICAg ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICB9IGNhdGNoIChQcm9maWxlRXhj ZXB0aW9uIGUxKSB7DQotICAgICAgICAgICAgICAgICAgICBMT0cuZXJyb3IoIkV4Y2VwdGlvbiBs b2FkaW5nIHByb2ZpbGUgIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHJlZmVyZW5j ZS5nZXRQYXRoKCksIGUxKTsNCisgICAgICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VW RVJFLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXhjZXB0aW9uIGxvYWRpbmcgcHJv ZmlsZSAiKyByZWZlcmVuY2UuZ2V0UGF0aCgpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlMSk7DQogICAgICAgICAgICAgICAgICAgICBwcm9maWxlUGFja2FnZXMgPSBDb2xsZWN0aW9u cy5lbXB0eVNldCgpOw0KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAg ICAgICB9DQpAQCAtMzM2LDggKzM0MCw4IEBADQogICAgICAgICAgICAgQ29sbGVjdGlvbiBwYWNr YWdlc0luUHJvZmlsZSA9IGZpbHRlclBhY2thZ2VzKHByb2ZpbGVQYWNrYWdlcyk7DQogDQogICAg ICAgICAgICAgZm9yIChPYmplY3Qgb2JqIDogcGFja2FnZXNJblByb2ZpbGUpIHsNCi0gICAgICAg ICAgICAgICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgcGFja2FnZSBpbiB0aGUgbW9kZWwsIA0K LSAgICAgICAgICAgICAgICAvLyB3ZSBzaG91bGQgc3VwcG9zZSBpdCdzIHRoZSBwcm9maWxlIG1v ZGVsLCANCisgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgcGFja2FnZSBp biB0aGUgbW9kZWwsDQorICAgICAgICAgICAgICAgIC8vIHdlIHNob3VsZCBzdXBwb3NlIGl0J3Mg dGhlIHByb2ZpbGUgbW9kZWwsDQogICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG1vcmUg dGhhbiBvbmUsIHdlIHRha2UgdGhlIG9uZXMNCiAgICAgICAgICAgICAgICAgLy8gbWFya2VkIGFz IDw8cHJvZmlsZT4+DQogICAgICAgICAgICAgICAgIGlmIChNb2RlbC5nZXRGYWNhZGUoKS5pc0FN b2RlbEVsZW1lbnQob2JqKQ0KQEAgLTM1NCw3ICszNTgsNyBAQA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC5sb2NhbGl6ZSgibWlzYy5wcm9maWxlLnVubmFtZWQiKTsNCiAg ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICB9DQotICAgICAg ICAgICAgICAgICAgICBMT0cuaW5mbygicHJvZmlsZSAiICsgZGlzcGxheU5hbWUpOw0KKyAgICAg ICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLCAicHJvZmlsZSB7MH0iLCBkaXNwbGF5 TmFtZSk7DQogDQogICAgICAgICAgICAgICAgICAgICBsb2FkRGVwZW5kZW50UHJvZmlsZXMob2Jq KTsNCiAgICAgICAgICAgICAgICAgfQ0KQEAgLTM3NCw5ICszNzgsOSBAQA0KIA0KIA0KICAgICAv KioNCi0gICAgICogRm9yIEFyZ29VTUwgVU1MIDEuNCBwcm9maWxlcyBkZXBlbmRlbmNpZXMgYXJl IGVuY29kZWQgYXMgYSBsaXN0IG9mIA0KKyAgICAgKiBGb3IgQXJnb1VNTCBVTUwgMS40IHByb2Zp bGVzIGRlcGVuZGVuY2llcyBhcmUgZW5jb2RlZCBhcyBhIGxpc3Qgb2YNCiAgICAgICogcHJvZmls ZSBuYW1lcyBpbiB0aGUgVGFnZ2VkVmFsdWUgbmFtZWQgIkRlcGVuZGVuY3kiIG9uIHRoZSBwcm9m aWxlIHBrZy4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBwa2cgcHJvZmlsZSBw YWNrYWdlDQogICAgICAqLw0KICAgICBwcml2YXRlIHZvaWQgbG9hZERlcGVuZGVudFByb2ZpbGVz VW1sMShPYmplY3QgcGtnKSB7DQpAQCAtMzkwLDEzICszOTQsMTMgQEANCiAgICAgICAgIHdoaWxl IChzdC5oYXNNb3JlVG9rZW5zKCkpIHsNCiAgICAgICAgICAgICBkZXBlbmRlbmN5TmFtZSA9IHN0 Lm5leHRUb2tlbigpOw0KICAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5TmFtZSAhPSBudWxsKSB7 DQotICAgICAgICAgICAgICAgIExPRy5kZWJ1ZygiQWRkaW5nIGRlcGVuZGVuY3kgIiArIGRlcGVu ZGVuY3lOYW1lKTsNCisgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiQWRkaW5n IGRlcGVuZGVuY3kgezB9IiwgZGVwZW5kZW5jeU5hbWUpOw0KICAgICAgICAgICAgICAgICBQcm9m aWxlIHByb2ZpbGUgPSBwcm9maWxlTWFuYWdlcg0KICAgICAgICAgICAgICAgICAgICAgICAgIC5s b29rRm9yUmVnaXN0ZXJlZFByb2ZpbGUoZGVwZW5kZW5jeU5hbWUpOw0KICAgICAgICAgICAgICAg ICBpZiAocHJvZmlsZSAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICBhZGRQcm9maWxl RGVwZW5kZW5jeShwcm9maWxlKTsNCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAg ICAgICAgICAgICAgIExPRy53YXJuKCJUaGUgcHJvZmlsZSBcIiIgKyBkaXNwbGF5TmFtZQ0KKyAg ICAgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5XQVJOSU5HLCAiVGhlIHByb2ZpbGUgXCIi ICsgZGlzcGxheU5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiXCIgaGFzIGEg ZGVwZW5kZW5jeSBuYW1lZCBcIiIgKyBkZXBlbmRlbmN5TmFtZQ0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICArICJcIiB3aGljaCBpc24ndCBzb2x2YWJsZS4iKTsNCiAgICAgICAgICAgICAg ICAgfQ0KQEAgLTQwNywyNSArNDExLDI1IEBADQogDQogICAgIC8qKg0KICAgICAgKiBMb2FkIEZp Z05vZGVzIGZyb20gcHJvZmlsZSBwYWNrYWdlcy4NCi0gICAgICogDQorICAgICAqDQogICAgICAq IEBwYXJhbSBwYWNrYWdlc0luUHJvZmlsZQ0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSB2b2lkIGxv YWRGaWdOb2RlcyhDb2xsZWN0aW9uIHBhY2thZ2VzSW5Qcm9maWxlKSB7DQogICAgICAgICBDb2xs ZWN0aW9uIGFsbFN0ZXJlb3R5cGVzID0gTW9kZWwuZ2V0RXh0ZW5zaW9uTWVjaGFuaXNtc0hlbHBl cigpDQogICAgICAgICAgICAgICAgIC5nZXRTdGVyZW90eXBlcyhwYWNrYWdlc0luUHJvZmlsZSk7 DQogICAgICAgICBmb3IgKE9iamVjdCBzdGVyZW90eXBlIDogYWxsU3RlcmVvdHlwZXMpIHsNCi0g ICAgICAgICAgICBDb2xsZWN0aW9uIHRhZ3MgPSBNb2RlbC5nZXRGYWNhZGUoKS5nZXRUYWdnZWRW YWx1ZXNDb2xsZWN0aW9uKA0KLSAgICAgICAgICAgICAgICAgICAgc3RlcmVvdHlwZSk7DQorICAg ICAgICAgICAgQ29sbGVjdGlvbiB0YWdzID0gTW9kZWwuZ2V0RmFjYWRlKCkuZ2V0VGFnZ2VkVmFs dWVzQ29sbGVjdGlvbihzdGVyZW90eXBlKTsNCiANCiAgICAgICAgICAgICBmb3IgKE9iamVjdCB0 YWcgOiB0YWdzKSB7DQogICAgICAgICAgICAgICAgIFN0cmluZyB0YWdOYW1lID0gTW9kZWwuZ2V0 RmFjYWRlKCkuZ2V0VGFnKHRhZyk7DQogICAgICAgICAgICAgICAgIGlmICh0YWdOYW1lID09IG51 bGwpIHsNCi0gICAgICAgICAgICAgICAgICAgIExPRy5kZWJ1ZygicHJvZmlsZSBwYWNrYWdlIHdp dGggc3RlcmVvdHlwZSAiDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgTW9kZWwuZ2V0 RmFjYWRlKCkuZ2V0TmFtZShzdGVyZW90eXBlKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICArICIgY29udGFpbnMgYSBudWxsIHRhZyBkZWZpbml0aW9uIik7DQorICAgICAgICAgICAgICAg ICAgICBMT0cubG9nKExldmVsLkZJTkUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJw cm9maWxlIHBhY2thZ2Ugd2l0aCBzdGVyZW90eXBlIHswfSBjb250YWlucyAiDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICsgImEgbnVsbCB0YWcgZGVmaW5pdGlvbiIsDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE1vZGVsLmdldEZhY2FkZSgpLmdldE5hbWUoc3RlcmVvdHlwZSkp Ow0KICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUudG9Mb3dlckNhc2UoKS5lcXVh bHMoImZpZ3VyZSIpKSB7DQotICAgICAgICAgICAgICAgICAgICBMT0cuZGVidWcoIkFkZEZpZ05v ZGUgIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArIE1vZGVsLmdldEZhY2FkZSgpLmdl dE5hbWUoc3RlcmVvdHlwZSkpOw0KKyAgICAgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5G SU5FLCAiQWRkRmlnTm9kZSB7MH0iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2Rl bC5nZXRGYWNhZGUoKS5nZXROYW1lKHN0ZXJlb3R5cGUpKTsNCiANCiAgICAgICAgICAgICAgICAg ICAgIFN0cmluZyB2YWx1ZSA9IE1vZGVsLmdldEZhY2FkZSgpLmdldFZhbHVlT2ZUYWcodGFnKTsN CiAgICAgICAgICAgICAgICAgICAgIEZpbGUgZiA9IG5ldyBGaWxlKHZhbHVlKTsNCkBAIC00MzUs NyArNDM5LDcgQEANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygp LCBmKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICBmaWdOb2RlU3RyYXRlZ3kuYWRkRGVzcmNp cHRvcihmbmQpOw0KICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkg ew0KLSAgICAgICAgICAgICAgICAgICAgICAgIExPRy5lcnJvcigiRXJyb3IgbG9hZGluZyBGaWdO b2RlIiwgZSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUs ICJFcnJvciBsb2FkaW5nIEZpZ05vZGUiLCBlKTsNCiAgICAgICAgICAgICAgICAgICAgIH0NCiAg ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCkBAIC00NDUsMjMgKzQ0OSwyMyBAQA0K ICAgICBAT3ZlcnJpZGUNCiAgICAgcHVibGljIFNldDxDcml0aWM+IGdldENyaXRpY3MoKSB7DQog ICAgICAgICBpZiAoIWNyaXRpY3NMb2FkZWQgKSB7DQotICAgICAgICAgICAgU2V0PENyaXRpYz4g bXlDcml0aWNzID0gc3VwZXIuZ2V0Q3JpdGljcygpOyAgICAgICAgIA0KKyAgICAgICAgICAgIFNl dDxDcml0aWM+IG15Q3JpdGljcyA9IHN1cGVyLmdldENyaXRpY3MoKTsNCiAgICAgICAgICAgICBt eUNyaXRpY3MuYWRkQWxsKGdldEFsbENyaXRpcXVlc0luTW9kZWwoKSk7DQotICAgICAgICAgICAg dGhpcy5zZXRDcml0aWNzKG15Q3JpdGljcyk7ICAgICAgICANCisgICAgICAgICAgICB0aGlzLnNl dENyaXRpY3MobXlDcml0aWNzKTsNCiAgICAgICAgICAgICBjcml0aWNzTG9hZGVkID0gdHJ1ZTsN CiAgICAgICAgIH0NCiAgICAgICAgIHJldHVybiBzdXBlci5nZXRDcml0aWNzKCk7DQogICAgIH0N Ci0gICAgDQorDQogICAgIC8qKg0KICAgICAgKiBAcmV0dXJuIHRoZSBwYWNrYWdlcyBpbiB0aGUg PGNvZGU+cHJvZmlsZVBhY2thZ2VzPC9jb2RlPg0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSBDb2xs ZWN0aW9uIGZpbHRlclBhY2thZ2VzKENvbGxlY3Rpb24gcGFja2FnZXMpIHsNCiAgICAgICAgIENv bGxlY3Rpb24gcmV0ID0gbmV3IEFycmF5TGlzdCgpOw0KLSAgICAgICAgDQotICAgICAgICAvLyBU T0RPOiBBbGwgdGhpcyBwcm9maWxlIGxvYWRpbmcvaGFuZGxpbmcgbmVlZHMgdG8gDQorDQorICAg ICAgICAvLyBUT0RPOiBBbGwgdGhpcyBwcm9maWxlIGxvYWRpbmcvaGFuZGxpbmcgbmVlZHMgdG8N CiAgICAgICAgIC8vIG1vdmUgc29tZXBsYWNlIGluIG1vZGVsIHN1YnN5c3RlbSBwcm9iYWJseQ0K LSAgICAgICAgDQorDQogICAgICAgICBmb3IgKE9iamVjdCBvYmplY3QgOiBwYWNrYWdlcykgew0K ICAgICAgICAgICAgIGlmIChNb2RlbC5nZXRGYWNhZGUoKS5pc0FQYWNrYWdlKG9iamVjdCkpIHsN CiAgICAgICAgICAgICAgICAgcmV0LmFkZChvYmplY3QpOw0KQEAgLTQ4MSw3ICs0ODUsNyBAQA0K IA0KICAgICAgICAgQ29sbGVjdGlvbiB0YWdzID0gTW9kZWwuZ2V0RmFjYWRlKCkuZ2V0VGFnZ2Vk VmFsdWVzQ29sbGVjdGlvbihjcml0aXF1ZSk7DQogICAgICAgICBib29sZWFuIGkxOG5Gb3VuZCA9 IGZhbHNlOw0KLSAgICAgICAgDQorDQogICAgICAgICBmb3IgKE9iamVjdCB0YWcgOiB0YWdzKSB7 DQogICAgICAgICAgICAgaWYgKE1vZGVsLmdldEZhY2FkZSgpLmdldFRhZyh0YWcpLnRvTG93ZXJD YXNlKCkuZXF1YWxzKCJpMThuIikpIHsNCiAgICAgICAgICAgICAgICAgaTE4bkZvdW5kID0gdHJ1 ZTsNCkBAIC01MDksNyArNTEzLDcgQEANCiAgICAgICAgICAgICAgICAgd2hpbGUgKHN0Lmhhc01v cmVUb2tlbnMoKSkgew0KICAgICAgICAgICAgICAgICAgICAgRGVjaXNpb24gZGVjaXNpb24gPSBz dHIyRGVjaXNpb24oc3QubmV4dFRva2VuKCkudHJpbSgpDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC50b0xvd2VyQ2FzZSgpKTsNCi0gICAgICAgICAgICAgICAgICAgIA0KKw0KICAgICAg ICAgICAgICAgICAgICAgaWYgKGRlY2lzaW9uICE9IG51bGwpIHsNCiAgICAgICAgICAgICAgICAg ICAgICAgICBzdXBwb3J0ZWREZWNpc2lvbnMuYWRkKGRlY2lzaW9uKTsNCiAgICAgICAgICAgICAg ICAgICAgIH0NCkBAIC01MjMsNyArNTI3LDcgQEANCiAgICAgICAgICAgICAgICAgd2hpbGUgKHN0 Lmhhc01vcmVUb2tlbnMoKSkgew0KICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGtub3dsZWRn ZSA9IHN0cjJLbm93bGVkZ2VUeXBlKHN0Lm5leHRUb2tlbigpLnRyaW0oKQ0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKSk7DQotICAgICAgICAgICAgICAgICAgICAN CisNCiAgICAgICAgICAgICAgICAgICAgIGlmIChrbm93bGVkZ2UgIT0gbnVsbCkgew0KICAgICAg ICAgICAgICAgICAgICAgICAgIGtub3dsZWRnZVR5cGVzLmFkZChrbm93bGVkZ2UpOw0KICAgICAg ICAgICAgICAgICAgICAgfQ0KQEAgLTUzNiwxNCArNTQwLDEzIEBADQogDQogICAgICAgICB9DQog DQotICAgICAgICBMT0cuZGVidWcoIk9DTC1Dcml0aWM6ICIgKyBvY2wpOw0KKyAgICAgICAgTE9H LmxvZyhMZXZlbC5GSU5FLCAiT0NMLUNyaXRpYzogezB9Iiwgb2NsKTsNCiANCiAgICAgICAgIHRy eSB7DQogICAgICAgICAgICAgcmV0dXJuIG5ldyBDck9DTChvY2wsIGhlYWRsaW5lLCBkZXNjcmlw dGlvbiwgcHJpb3JpdHksDQogICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWREZWNpc2lvbnMs IGtub3dsZWRnZVR5cGVzLCBtb3JlSW5mb1VSTCk7DQogICAgICAgICB9IGNhdGNoIChJbnZhbGlk T2NsRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICBMT0cuZXJyb3IoIkludmFsaWQgT0NMIGlu IFhNSSEiLCBlKTsNCi0NCisgICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwgIkludmFs aWQgT0NMIGluIFhNSSEiLCBlKTsNCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsNCiAgICAgICAg IH0NCiANCkBAIC01NTEsNyArNTU0LDcgQEANCiANCiAgICAgcHJpdmF0ZSBTdHJpbmcgc3RyMktu b3dsZWRnZVR5cGUoU3RyaW5nIHRva2VuKSB7DQogICAgICAgICBTdHJpbmcga25vd2xlZGdlID0g bnVsbDsNCi0gICAgICAgIA0KKw0KICAgICAgICAgaWYgKHRva2VuLmVxdWFscygiY29tcGxldGVu ZXNzIikpIHsNCiAgICAgICAgICAgICBrbm93bGVkZ2UgPSBDcml0aWMuS1RfQ09NUExFVEVORVNT Ow0KICAgICAgICAgfQ0KQEAgLTU5MCw3ICs1OTMsNyBAQA0KIA0KICAgICBwcml2YXRlIGludCBz dHIyUHJpb3JpdHkoU3RyaW5nIHByaW9TdHIpIHsNCiAgICAgICAgIGludCBwcmlvID0gVG9Eb0l0 ZW0uTUVEX1BSSU9SSVRZOw0KLSAgICAgICAgDQorDQogICAgICAgICBpZiAocHJpb1N0ci50b0xv d2VyQ2FzZSgpLmVxdWFscygiaGlnaCIpKSB7DQogICAgICAgICAgICAgcHJpbyA9IFRvRG9JdGVt LkhJR0hfUFJJT1JJVFk7DQogICAgICAgICB9IGVsc2UgaWYgKHByaW9TdHIudG9Mb3dlckNhc2Uo KS5lcXVhbHMoIm1lZCIpKSB7DQpAQCAtNjA1LDExICs2MDgsMTEgQEANCiANCiAgICAgcHJpdmF0 ZSBEZWNpc2lvbiBzdHIyRGVjaXNpb24oU3RyaW5nIHRva2VuKSB7DQogICAgICAgICBEZWNpc2lv biBkZWNpc2lvbiA9IG51bGw7DQotICAgICAgICANCisNCiAgICAgICAgIGlmICh0b2tlbi5lcXVh bHMoImJlaGF2aW9yIikpIHsNCiAgICAgICAgICAgICBkZWNpc2lvbiA9IFVNTERlY2lzaW9uLkJF SEFWSU9SOw0KICAgICAgICAgfQ0KLSAgICAgICAgaWYgKHRva2VuLmVxdWFscygiY29udGFpbm1l bnQiKSkgeyAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgaWYgKHRva2VuLmVxdWFs cygiY29udGFpbm1lbnQiKSkgew0KICAgICAgICAgICAgIGRlY2lzaW9uID0gVU1MRGVjaXNpb24u Q09OVEFJTk1FTlQ7DQogICAgICAgICB9DQogICAgICAgICBpZiAodG9rZW4uZXF1YWxzKCJjbGFz c3NlbGVjdGlvbiIpKSB7DQpAQCAtNjMzLDcgKzYzNiw3IEBADQogICAgICAgICBpZiAodG9rZW4u ZXF1YWxzKCJtb2R1bGFyaXR5IikpIHsNCiAgICAgICAgICAgICBkZWNpc2lvbiA9IFVNTERlY2lz aW9uLk1PRFVMQVJJVFk7DQogICAgICAgICB9DQotICAgICAgICBpZiAodG9rZW4uZXF1YWxzKCJu YW1pbmciKSkgeyAgICAgICAgICAgICAgICAgICAgICAgDQorICAgICAgICBpZiAodG9rZW4uZXF1 YWxzKCJuYW1pbmciKSkgew0KICAgICAgICAgICAgIGRlY2lzaW9uID0gVU1MRGVjaXNpb24uTkFN SU5HOw0KICAgICAgICAgfQ0KICAgICAgICAgaWYgKHRva2VuLmVxdWFscygicGF0dGVybnMiKSkg ew0KQEAgLTcwNiw3ICs3MDksNyBAQA0KIA0KICAgICAvKioNCiAgICAgICogUmV0dXJucyBudWxs LiBUaGlzIHByb2ZpbGUgaGFzIG5vIGZvcm1hdHRpbmcgc3RyYXRlZ3kuDQotICAgICAqIA0KKyAg ICAgKg0KICAgICAgKiBAcmV0dXJuIG51bGwuDQogICAgICAqLw0KICAgICBAT3ZlcnJpZGUNCkBA IC03MTYsNyArNzE5LDcgQEANCiANCiAgICAgLyoqDQogICAgICAqIFJldHVybnMgbnVsbC4gVGhp cyBwcm9maWxlIGhhcyBubyBmaWd1cmUgc3RyYXRlZ3kuDQotICAgICAqIA0KKyAgICAgKg0KICAg ICAgKiBAcmV0dXJuIG51bGwuDQogICAgICAqLw0KICAgICBAT3ZlcnJpZGUNCkBAIC03NDUsNyAr NzQ4LDcgQEANCiAgICAgICAgIGxvYWRNb2RlbCgpOw0KICAgICAgICAgcmV0dXJuIHByb2ZpbGVQ YWNrYWdlczsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgQE92ZXJyaWRlDQogICAgIHB1YmxpYyBD b2xsZWN0aW9uIGdldExvYWRlZFBhY2thZ2VzKCkgew0KICAgICAgICAgaWYgKHByb2ZpbGVQYWNr YWdlcyA9PSBudWxsKSB7DQpAQCAtNzU0LDcgKzc1Nyw3IEBADQogICAgICAgICAgICAgcmV0dXJu IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUNvbGxlY3Rpb24ocHJvZmlsZVBhY2thZ2VzKTsNCiAg ICAgICAgIH0NCiAgICAgfQ0KLSAgICANCisNCiAgICAgcHJpdmF0ZSBGaWdOb2RlRGVzY3JpcHRv ciBsb2FkSW1hZ2UoU3RyaW5nIHN0ZXJlb3R5cGUsIEZpbGUgZikNCiAgICAgICAgIHRocm93cyBJ T0V4Y2VwdGlvbiB7DQogICAgICAgICBGaWdOb2RlRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gbmV3 IEZpZ05vZGVEZXNjcmlwdG9yKCk7DQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAv c3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUvWmlwTW9kZWxMb2FkZXIuamF2YQ0KVXJsOiBodHRwOi8v YXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9zcmMvYXJnb3Vt bC1hcHAvc3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUvWmlwTW9kZWxMb2FkZXIuamF2YT92aWV3PWRp ZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wcm9maWxlL1ppcE1v ZGVsTG9hZGVyLmphdmEJKG9yaWdpbmFsKQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMv b3JnL2FyZ291bWwvcHJvZmlsZS9aaXBNb2RlbExvYWRlci5qYXZhCTIwMTItMTItMzAgMDU6MDY6 MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQogLyogJElkJA0KICAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Kg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBD b3B5cmlnaHQgKGMpIDIwMDktMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwg cmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJp YWxzDQogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBz ZSBQdWJsaWMgTGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmli dXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCkBAIC00NCwyNSArNDQsMjcgQEANCiBpbXBvcnQg amF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOw0KIGltcG9ydCBqYXZhLm5ldC5VUkw7DQog aW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5M ZXZlbDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KIGltcG9ydCBqYXZhLnV0 aWwuemlwLlppcEVudHJ5Ow0KIGltcG9ydCBqYXZhLnV0aWwuemlwLlppcElucHV0U3RyZWFtOw0K IA0KLWltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsNCi0NCiAvKioNCi0gKiBMb2FkcyBt b2RlbCBkYXRhIGZyb20gYSBaaXAgZmlsZQ0KLSAqIA0KKyAqIExvYWRzIG1vZGVsIGRhdGEgZnJv bSBhIFppcCBmaWxlLg0KKyAqDQogICogQGF1dGhvciBtYXVyZWxpbzEyMzQNCiAgKi8NCiBwdWJs aWMgY2xhc3MgWmlwTW9kZWxMb2FkZXIgZXh0ZW5kcyBTdHJlYW1Nb2RlbExvYWRlciB7DQogDQot ICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dnZXIuZ2V0TG9nZ2VyKFpp cE1vZGVsTG9hZGVyLmNsYXNzKTsNCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExP RyA9DQorICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKFppcE1vZGVsTG9hZGVyLmNsYXNzLmdldE5h bWUoKSk7DQorDQogDQotICAgDQotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGxvYWRNb2RlbChQcm9m aWxlUmVmZXJlbmNlIHJlZmVyZW5jZSkgDQorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGxvYWRNb2Rl bChQcm9maWxlUmVmZXJlbmNlIHJlZmVyZW5jZSkNCiAgICAgICAgIHRocm93cyBQcm9maWxlRXhj ZXB0aW9uIHsNCi0gICAgICAgIExPRy5pbmZvKCJMb2FkaW5nIHByb2ZpbGUgZnJvbSBaSVAgJyIg KyByZWZlcmVuY2UuZ2V0UGF0aCgpICsgIiciKTsNCi0gICAgICAgIA0KKyAgICAgICAgTE9HLmxv ZyhMZXZlbC5JTkZPLA0KKyAgICAgICAgICAgICAgICAiTG9hZGluZyBwcm9maWxlIGZyb20gWklQ IHswfSIsIHJlZmVyZW5jZS5nZXRQYXRoKCkpOw0KKw0KICAgICAgICAgaWYgKCFyZWZlcmVuY2Uu Z2V0UGF0aCgpLmVuZHNXaXRoKCJ6aXAiKSkgew0KICAgICAgICAgICAgIHRocm93IG5ldyBQcm9m aWxlRXhjZXB0aW9uKCJQcm9maWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQhIik7DQogICAgICAgICB9 DQpAQCAtODQsMTkgKzg2LDIzIEBADQogICAgICAgICB0cnkgew0KICAgICAgICAgICAgIGlzID0g b3BlblppcFN0cmVhbUF0KG1vZGVsRmlsZS50b1VSSSgpLnRvVVJMKCksIGV4dGVuc2lvbik7DQog ICAgICAgICB9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkgew0KLSAgICAgICAgICAg IExPRy5lcnJvcigiRXhjZXB0aW9uIHdoaWxlIGxvYWRpbmcgcHJvZmlsZSAnIg0KLSAgICAgICAg ICAgICAgICAgICAgKyByZWZlcmVuY2UuZ2V0UGF0aCgpICsgIiciLCBlKTsNCisgICAgICAgICAg ICBMT0cubG9nKExldmVsLlNFVkVSRSwNCisgICAgICAgICAgICAgICAgICAgICJFeGNlcHRpb24g d2hpbGUgbG9hZGluZyBwcm9maWxlICciDQorICAgICAgICAgICAgICAgICAgICArIHJlZmVyZW5j ZS5nZXRQYXRoKCkgKyAiJyIsDQorICAgICAgICAgICAgICAgICAgICBlKTsNCiAgICAgICAgICAg ICB0aHJvdyBuZXcgUHJvZmlsZUV4Y2VwdGlvbihlKTsNCiAgICAgICAgIH0gY2F0Y2ggKElPRXhj ZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICBMT0cuZXJyb3IoIkV4Y2VwdGlvbiB3aGlsZSBsb2Fk aW5nIHByb2ZpbGUgJyINCi0gICAgICAgICAgICAgICAgICAgICsgcmVmZXJlbmNlLmdldFBhdGgo KSArICInIiwgZSk7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsDQorICAgICAg ICAgICAgICAgICAgICAiRXhjZXB0aW9uIHdoaWxlIGxvYWRpbmcgcHJvZmlsZSAnIg0KKyAgICAg ICAgICAgICAgICAgICAgKyByZWZlcmVuY2UuZ2V0UGF0aCgpICsgIiciLA0KKyAgICAgICAgICAg ICAgICAgICAgZSk7DQogICAgICAgICAgICAgdGhyb3cgbmV3IFByb2ZpbGVFeGNlcHRpb24oZSk7 DQogICAgICAgICB9DQotICAgICAgICANCisNCiAgICAgICAgIGlmIChpcyA9PSBudWxsKSB7DQog ICAgICAgICAgICAgdGhyb3cgbmV3IFByb2ZpbGVFeGNlcHRpb24oIlByb2ZpbGUgY291bGQgbm90 IGJlIGxvYWRlZCEiKTsNCiAgICAgICAgIH0NCi0gICAgICAgIA0KKw0KICAgICAgICAgcmV0dXJu IHN1cGVyLmxvYWRNb2RlbChpcywgcmVmZXJlbmNlLmdldFB1YmxpY1JlZmVyZW5jZSgpKTsNCiAg ICAgfQ0KIA0KDQpNb2RpZmllZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3Vt bC9wcm9maWxlL2luaXQvUHJvZmlsZUxvYWRlci5qYXZhDQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRp Z3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMv b3JnL2FyZ291bWwvcHJvZmlsZS9pbml0L1Byb2ZpbGVMb2FkZXIuamF2YT92aWV3PWRpZmYmcGF0 aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g dHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wcm9maWxlL2luaXQvUHJvZmls ZUxvYWRlci5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29y Zy9hcmdvdW1sL3Byb2ZpbGUvaW5pdC9Qcm9maWxlTG9hZGVyLmphdmEJMjAxMi0xMi0zMCAwNTow NjowMS0wODAwDQpAQCAtMSw2ICsxLDYgQEANCiAvKiAkSWQkDQogICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqDQotICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93 DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQog ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5n IG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMg ZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNTIsOCArNTIsOSBAQA0KIGlt cG9ydCBqYXZhLnV0aWwuamFyLkF0dHJpYnV0ZXM7DQogaW1wb3J0IGphdmEudXRpbC5qYXIuSmFy RmlsZTsNCiBpbXBvcnQgamF2YS51dGlsLmphci5NYW5pZmVzdDsNCitpbXBvcnQgamF2YS51dGls LmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiANCi1p bXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmNvZ25p dGl2ZS5Dcml0aWM7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmkxOG4uVHJhbnNsYXRvcjsNCiBpbXBv cnQgb3JnLmFyZ291bWwubW9kdWxlbG9hZGVyLk1vZHVsZUxvYWRlcjI7DQpAQCAtNjIsNDIgKzYz LDQzIEBADQogaW1wb3J0IG9yZy5hcmdvdW1sLnByb2ZpbGUuVXNlckRlZmluZWRQcm9maWxlOw0K IA0KIC8qKg0KLSAqIFRoaXMgaXMgdGhlIHByb2ZpbGUgbG9hZGVyIHRoYXQgbG9hZHMgbW9kdWxl cyBwcm9maWxlcw0KLSAqIA0KKyAqIFRoaXMgaXMgdGhlIHByb2ZpbGUgbG9hZGVyIHRoYXQgbG9h ZHMgbW9kdWxlcyBwcm9maWxlcy4NCisgKg0KICAqIEBhdXRob3IgbWF1cmVsaW8xMjM0DQogICov DQogcHVibGljIGZpbmFsIGNsYXNzIFByb2ZpbGVMb2FkZXIgew0KICAgICAvKioNCiAgICAgICog TG9nZ2VyLg0KICAgICAgKi8NCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9 IExvZ2dlci5nZXRMb2dnZXIoUHJvZmlsZUxvYWRlci5jbGFzcyk7DQotICAgIA0KKyAgICBwcml2 YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCisgICAgICAgIExvZ2dlci5nZXRMb2dnZXIo UHJvZmlsZUxvYWRlci5jbGFzcy5nZXROYW1lKCkpOw0KKw0KICAgICAvKioNCiAgICAgICogVGhl IHByZWZpeCBpbiBVUkw6cyB0aGF0IGFyZSBqYXJzLg0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSBz dGF0aWMgZmluYWwgU3RyaW5nIEpBUl9QUkVGSVggPSAiamFyOiI7DQotICAgIA0KKw0KICAgICAv KioNCiAgICAgICogVGhlIHByZWZpeCBpbiBVUkw6cyB0aGF0IGFyZSBmaWxlcy4NCiAgICAgICov DQogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFX1BSRUZJWCA9ICJmaWxlOiI7 DQotICAgIA0KKw0KICAgICAvKioNCi0gICAgICogTG9va3MgZm9yIHByb2ZpbGVzIGluIHRoZSBq YXJzIGluIHRoZSBkaXJlY3RvcmllcyB1c2VkIGJ5IHRoZSANCi0gICAgICogTW9kdWxlTG9hZGVy IHRvIGxvYWQgbW9kdWxlcw0KKyAgICAgKiBMb29rcyBmb3IgcHJvZmlsZXMgaW4gdGhlIGphcnMg aW4gdGhlIGRpcmVjdG9yaWVzIHVzZWQgYnkgdGhlDQorICAgICAqIE1vZHVsZUxvYWRlciB0byBs b2FkIG1vZHVsZXMuDQogICAgICAqLw0KICAgICBwdWJsaWMgdm9pZCBkb0xvYWQoKSB7DQotICAg ICAgICBMaXN0PFN0cmluZz4gZXh0RGlycyA9IA0KKyAgICAgICAgTGlzdDxTdHJpbmc+IGV4dERp cnMgPQ0KICAgICAgICAgICAgIE1vZHVsZUxvYWRlcjIuZ2V0SW5zdGFuY2UoKS5nZXRFeHRlbnNp b25Mb2NhdGlvbnMoKTsNCi0gICAgICAgIA0KKw0KICAgICAgICAgZm9yIChTdHJpbmcgZXh0RGly IDogZXh0RGlycykgew0KICAgICAgICAgICAgIGh1bnRGb3JQcm9maWxlc0luRGlyKGV4dERpcik7 DQogICAgICAgICB9DQogICAgIH0NCiANCiAgICAgcHJpdmF0ZSB2b2lkIGh1bnRGb3JQcm9maWxl c0luRGlyKFN0cmluZyBkaXIpIHsNCi0gICAgICAgIExPRy5pbmZvKCJMb29raW5nIGZvciBQcm9m aWxlcyBpbiAiICsgZGlyKTsNCi0gICAgICAgIA0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZP LCAiTG9va2luZyBmb3IgUHJvZmlsZXMgaW4gezB9IiwgZGlyKTsNCisNCiAgICAgICAgIEZpbGUg ZXh0ZW5zaW9uRGlyID0gbmV3IEZpbGUoZGlyKTsNCiAgICAgICAgIGlmIChleHRlbnNpb25EaXIu aXNEaXJlY3RvcnkoKSkgew0KICAgICAgICAgICAgIEZpbGVbXSBmaWxlcyA9IGV4dGVuc2lvbkRp ci5saXN0RmlsZXMobmV3IEphckZpbGVGaWx0ZXIoKSk7DQpAQCAtMTA2LDggKzEwOCw5IEBADQog ICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICBqYXJmaWxlID0gbmV3 IEphckZpbGUoZmlsZSk7DQogICAgICAgICAgICAgICAgICAgICBpZiAoamFyZmlsZSAhPSBudWxs KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgTE9HLmluZm8oIkxvb2tpbmcgZm9yIFByb2Zp bGVzIGluIHRoZSBKYXIgIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBqYXJm aWxlLmdldE5hbWUoKSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5J TkZPLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxvb2tpbmcgZm9yIFByb2Zp bGVzIGluIHRoZSBKYXIgezB9IiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGph cmZpbGUuZ2V0TmFtZSgpKTsNCiANCiAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc0xvYWRl ciBjbGFzc2xvYWRlciA9IG5ldyBVUkxDbGFzc0xvYWRlcigNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5ldyBVUkxbXSB7ZmlsZS50b1VSSSgpLnRvVVJMKCl9KTsNCkBAIC0xMTUs NyArMTE4LDcgQEANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzbG9hZGVy KTsNCiAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9F eGNlcHRpb24gaW9lKSB7DQotICAgICAgICAgICAgICAgICAgICBMT0cuZGVidWcoIkNhbm5vdCBv cGVuIEphciBmaWxlICIgKyBmaWxlLCBpb2UpOw0KKyAgICAgICAgICAgICAgICAgICAgTE9HLmxv ZyhMZXZlbC5GSU5FLCAiQ2Fubm90IG9wZW4gSmFyIGZpbGUgIiArIGZpbGUsIGlvZSk7DQogICAg ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICB9DQogICAgICAgICB9DQpAQCAtMTI1LDcgKzEy OCw3IEBADQogICAgIC8qKg0KICAgICAgKiBJbnRlcnByZXRzIHRoZSBNQU5JRkVTVCBmaWxlIGlu IHRoZSBKQVIgaW4gb3JkZXIgdG8gbG9hZCB0aGUgZGVjbGFyZWQNCiAgICAgICogcHJvZmlsZS4N Ci0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBmaWxlIHRoZSBmaWxlIG9iamVjdCBy ZWZlcmVuY2luZyB0aGUgSmFyDQogICAgICAqIEBwYXJhbSBtYW5pZmVzdCB0aGUgbWFuaWZlc3Qg ZmlsZSBvZiB0aGUgSmFyDQogICAgICAqIEBwYXJhbSBjbGFzc2xvYWRlciB0aGUgY2xhc3Nsb2Fk ZXIgdGhhdCBsb2FkcyB0aGUgY2xhc3NlcyByZWZlcmVuY2VkIGJ5DQpAQCAtMTYzLDEyICsxNjYs MTIgQEANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZmlsZUZhY2FkZS5nZXRNYW5h Z2VyKCkpOw0KIA0KICAgICAgICAgICAgICAgICAgICAgUHJvZmlsZUZhY2FkZS5nZXRNYW5hZ2Vy KCkucmVnaXN0ZXJQcm9maWxlKHVkcCk7DQotICAgICAgICAgICAgICAgICAgICBMT0cuZGVidWco IlJlZ2lzdGVyZWQgUHJvZmlsZTogIiArIHVkcC5nZXREaXNwbGF5TmFtZSgpDQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICsgIi4uLiIpOw0KKyAgICAgICAgICAgICAgICAgICAgTE9HLmxv ZyhMZXZlbC5GSU5FLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVnaXN0ZXJlZCBQ cm9maWxlOiB7MH0iLCB1ZHAuZ2V0RGlzcGxheU5hbWUoKSk7DQogICAgICAgICAgICAgICAgIH0g Y2F0Y2ggKFByb2ZpbGVFeGNlcHRpb24gZSkgew0KLSAgICAgICAgICAgICAgICAgICAgTE9HLmVy cm9yKCJFeGNlcHRpb24iLCBlKTsNCisgICAgICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwu U0VWRVJFLCAiRXhjZXB0aW9uIiwgZSk7DQogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhj ZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICAgICAgICAgIExPRy5lcnJvcigiRXhjZXB0aW9uIiwg ZSk7DQorICAgICAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwgIkV4Y2VwdGlv biIsIGUpOw0KICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0KIA0KQEAgLTE3Niwx MCArMTc5LDEwIEBADQogICAgIH0NCiANCiAgICAgLyoqDQotICAgICAqIFJlc29sdmVzIHRoZSBk ZXBlbmRlbmNpZXMgZm9yIGEgUHJvZmlsZQ0KLSAgICAgKiANCisgICAgICogUmVzb2x2ZXMgdGhl IGRlcGVuZGVuY2llcyBmb3IgYSBQcm9maWxlLg0KKyAgICAgKg0KICAgICAgKiBAcGFyYW0gYXR0 ciBhIGdyb3VwIG9mIGF0dHJpYnV0ZXMgaW4gdGhlIE1BTklGRVNUIGZpbGUgZm9yIHRoaXMgSkFS DQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAcmV0dXJuIHRoZSBzZXQgb2YgZGVmaW5lZCBw cm9maWxlcw0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSBTZXQ8U3RyaW5nPiBsb2FkTWFuaWZlc3RE ZXBlbmRlbmNpZXNGb3JQcm9maWxlKEF0dHJpYnV0ZXMgYXR0cikgew0KQEAgLTE5OCwxMSArMjAx LDExIEBADQogICAgIH0NCiANCiAgICAgLyoqDQotICAgICAqIExvYWRzIHRoZSBKYXZhIGNyaXRp Y3MgZGVmaW5lZCBieSBhIHByb2ZpbGUNCi0gICAgICogDQorICAgICAqIExvYWRzIHRoZSBKYXZh IGNyaXRpY3MgZGVmaW5lZCBieSBhIHByb2ZpbGUuDQorICAgICAqDQogICAgICAqIEBwYXJhbSBh dHRyIHRoZSBNYW5pZmVzdCBzZWN0aW9uIG9mIHRoZSBwcm9maWxlDQogICAgICAqIEBwYXJhbSBj bGFzc2xvYWRlciB0aGUgY2xhc3Nsb2FkZXIgb2YgdGhlIEphcg0KLSAgICAgKiANCisgICAgICoN CiAgICAgICogQHJldHVybiB0aGUgc2V0IG9mIGRlZmluZWQgY3JpdGljcw0KICAgICAgKi8NCiAg ICAgcHJpdmF0ZSBTZXQ8Q3JpdGljPiBsb2FkSmF2YUNyaXRpY3NGb3JQcm9maWxlKEF0dHJpYnV0 ZXMgYXR0ciwNCkBAIC0yMjEsMTggKzIyNCwxOSBAQA0KICAgICAgICAgICAgICAgICAgICAgQ3Jp dGljIGNyaXRpYyA9IChDcml0aWMpIGNsLm5ld0luc3RhbmNlKCk7DQogICAgICAgICAgICAgICAg ICAgICByZXQuYWRkKGNyaXRpYyk7DQogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKENsYXNzTm90 Rm91bmRFeGNlcHRpb24gZSkgew0KLSAgICAgICAgICAgICAgICAgICAgTE9HLmVycm9yKCJFcnJv ciBsb2FkaW5nIGNsYXNzOiAiICsgZW50cnksIGUpOw0KKyAgICAgICAgICAgICAgICAgICAgTE9H LmxvZyhMZXZlbC5TRVZFUkUsICJFcnJvciBsb2FkaW5nIGNsYXNzOiAiICsgZW50cnksIGUpOw0K ICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGUpIHsNCi0g ICAgICAgICAgICAgICAgICAgIExPRy5lcnJvcigiRXJyb3IgaW5zdGFudGlhbnRpbmcgY2xhc3M6 ICIgKyBlbnRyeSwgZSk7DQorICAgICAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVS RSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGluc3RhbnRpYW50aW5nIGNs YXNzOiAiICsgZW50cnksIGUpOw0KICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNj ZXNzRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICAgICAgICAgIExPRy5lcnJvcigiRXhjZXB0 aW9uIiwgZSk7DQorICAgICAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwgIkV4 Y2VwdGlvbiIsIGUpOw0KICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0KICAgICAg ICAgfQ0KIA0KICAgICAgICAgcmV0dXJuIHJldDsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgLyoq DQogICAgICAqIFRoZSBmaWxlIGZpbHRlciB0aGF0IHNlbGVjdHMgSmFyIGZpbGVzLg0KICAgICAg Ki8NCkBAIC0yNDYsNSArMjUwLDUgQEANCiAgICAgICAgICAgICAgICAgICAgICYmIHBhdGhuYW1l LmdldFBhdGgoKS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIuamFyIikpOw0KICAgICAgICAgfQ0K ICAgICB9DQotICAgIA0KKw0KIH0NCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9z cmMvb3JnL2FyZ291bWwvcHJvZmlsZS9pbnRlcm5hbC9EZXBlbmRlbmN5UmVzb2x2ZXIuamF2YQ0K VXJsOiBodHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVu ay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUvaW50ZXJuYWwvRGVwZW5k ZW5jeVJlc29sdmVyLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5 MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMv b3JnL2FyZ291bWwvcHJvZmlsZS9pbnRlcm5hbC9EZXBlbmRlbmN5UmVzb2x2ZXIuamF2YQkob3Jp Z2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wcm9maWxl L2ludGVybmFsL0RlcGVuZGVuY3lSZXNvbHZlci5qYXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgw MA0KQEAgLTEsNiArMSw2IEBADQogLyogJElkJA0KICAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAq IENvcHlyaWdodCAoYykgMjAxMCBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmln aHQgKGMpIDIwMTAtMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRz IHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQog ICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJs aWMgTGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24s IGFuZCBpcyBhdmFpbGFibGUgYXQNCkBAIC0xMywxMSArMTMsMTEgQEANCiANCiBwYWNrYWdlIG9y Zy5hcmdvdW1sLnByb2ZpbGUuaW50ZXJuYWw7DQogDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0 aW9uOw0KIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7DQogaW1wb3J0IGphdmEudXRpbC5I YXNoU2V0Ow0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCi0NCi1pbXBvcnQgb3JnLmFw YWNoZS5sb2c0ai5Mb2dnZXI7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2lt cG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQogLyoqDQogICogQSBkZXBlbmRlbmN5 IHJlc29sdmVyIGZvciBpdGVtcyBvZiB0eXBlIFQuIEl0IGltcGxlbWVudHMgYSBzdGF0ZS1mdWxs DQpAQCAtMjcsMTEgKzI3LDEyIEBADQogICogQHBhcmFtIDxUPiB0aGUgdHlwZSBvZiBpdGVtcyBm b3Igd2hpY2ggZGVwZW5kZW5jaWVzIHdpbGwgYmUgcmVzb2x2ZWQuDQogICovDQogY2xhc3MgRGVw ZW5kZW5jeVJlc29sdmVyPFQ+IHsNCi0gICAgDQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExv Z2dlciBMT0cgPSBMb2dnZXIuZ2V0TG9nZ2VyKA0KLSAgICAgICAgICAgIERlcGVuZGVuY3lSZXNv bHZlci5jbGFzcyk7DQorDQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0K KyAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihEZXBlbmRlbmN5UmVzb2x2ZXIuY2xhc3MuZ2V0TmFt ZSgpKTsNCiANCiAgICAgcHJpdmF0ZSBEZXBlbmRlbmN5Q2hlY2tlcjxUPiBjaGVja2VyOw0KKw0K ICAgICAvKioNCiAgICAgICogV0FSTklORzogb25seSB0byBiZSB1c2VkIGZyb20gb3V0c2lkZSBj bGFzc2VzIGJ5IHRlc3RzLg0KICAgICAgKiBUaGlzIGlzIHRoZSBzdGF0ZS1mdWxsIHBhcnQgb2Yg dGhlIGFsZ29yaXRobSwgc3RvcmluZyB0aGUgdW5yZXNvbHZlZA0KQEAgLTc2LDE4ICs3NywyMSBA QA0KICAgICAgICAgQ29sbGVjdGlvbjxUPiBhbGxVbnJlc29sdmVkSXRlbXMgPSBuZXcgSGFzaFNl dDxUPigpOw0KICAgICAgICAgYWxsVW5yZXNvbHZlZEl0ZW1zLmFkZEFsbChpdGVtcyk7DQogICAg ICAgICBhbGxVbnJlc29sdmVkSXRlbXMuYWRkQWxsKHVucmVzb2x2ZWRJdGVtcyk7DQotICAgICAg ICBpZiAoTE9HLmlzRGVidWdFbmFibGVkKCkpIHsNCi0gICAgICAgICAgICBMT0cuZGVidWcoaXRl bXMyTXNnKCJBdHRlbXB0IHRvIHJlc29sdmUgdGhlIGZvbGxvd2luZyBpdGVtczoiLA0KLSAgICAg ICAgICAgICAgICBhbGxVbnJlc29sdmVkSXRlbXMpKTsNCisgICAgICAgIA0KKyAgICAgICAgaWYg KExPRy5pc0xvZ2dhYmxlKExldmVsLkZJTkUpKSB7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZl bC5GSU5FLA0KKyAgICAgICAgICAgICAgICAgICAgaXRlbXMyTXNnKCJBdHRlbXB0IHRvIHJlc29s dmUgdGhlIGZvbGxvd2luZyBpdGVtczoiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGFsbFVucmVzb2x2ZWRJdGVtcykpOw0KICAgICAgICAgfQ0KICAgICAgICAgQ29sbGVjdGlvbjxU PiByZXNvbHZlZCA9IGludGVybmFsUmVzb2x2ZShhbGxVbnJlc29sdmVkSXRlbXMpOw0KICAgICAg ICAgYWxsVW5yZXNvbHZlZEl0ZW1zLnJlbW92ZUFsbChyZXNvbHZlZCk7DQogICAgICAgICB1bnJl c29sdmVkSXRlbXMuY2xlYXIoKTsNCiAgICAgICAgIHVucmVzb2x2ZWRJdGVtcy5hZGRBbGwoYWxs VW5yZXNvbHZlZEl0ZW1zKTsNCiAgICAgICAgIGlmICghdW5yZXNvbHZlZEl0ZW1zLmlzRW1wdHko KSkgew0KLSAgICAgICAgICAgIExPRy53YXJuKGl0ZW1zMk1zZygNCi0gICAgICAgICAgICAgICAg IlRoZSBmb2xsb3dpbmcgaXRlbXMgd2VyZSBsZWZ0IHVucmVzb2x2ZWQgYWZ0ZXIgYXR0ZW1wdDpc biIsDQotICAgICAgICAgICAgICAgIHVucmVzb2x2ZWRJdGVtcykpOw0KKyAgICAgICAgICAgIExP Ry5sb2coTGV2ZWwuV0FSTklORywNCisgICAgICAgICAgICAgICAgICAgIGl0ZW1zMk1zZygiVGhl IGZvbGxvd2luZyBpdGVtcyB3ZXJlIGxlZnQgdW5yZXNvbHZlZCBhZnRlciAiDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKyAiYXR0ZW1wdDpcbiIsDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5yZXNvbHZlZEl0ZW1zKSk7DQogICAgICAgICB9DQogICAgIH0NCiANCkBA IC0xMDQsNyArMTA4LDcgQEANCiAgICAgLyoqDQogICAgICAqIFJlY3Vyc2l2ZWx5IHJlc29sdmUg YWxsIGRlcGVuZGVuY2llcy4gU3RvcHMgd2hlbiBhbiBpdGVyYXRpb24gdGhyb3VnaA0KICAgICAg KiBhbGwgdW5yZXNvbHZlZCBpdGVtcyBkaWRuJ3QgbWFuYWdlIHRvIHJlc29sdmUgYW55Lg0KLSAg ICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIGl0ZW1zIGl0ZW1zIHRvIHJlc29sdmUuDQog ICAgICAqIEByZXR1cm4gdGhlIGl0ZW1zIHRoYXQgd2VyZSByZXNvbHZlZC4NCiAgICAgICovDQoN Ck1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUv aW50ZXJuYWwvUHJvZmlsZU1hbmFnZXJJbXBsLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGln cmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9v cmcvYXJnb3VtbC9wcm9maWxlL2ludGVybmFsL1Byb2ZpbGVNYW5hZ2VySW1wbC5qYXZhP3ZpZXc9 ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUvaW50 ZXJuYWwvUHJvZmlsZU1hbmFnZXJJbXBsLmphdmEJKG9yaWdpbmFsKQ0KKysrIHRydW5rL3NyYy9h cmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcHJvZmlsZS9pbnRlcm5hbC9Qcm9maWxlTWFuYWdl ckltcGwuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8q ICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAx MCBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiBD b250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHBy b2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZhaWxh YmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQog ICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUg YXQNCkBAIC00Niw4ICs0Niw5IEBADQogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsNCiBp bXBvcnQgamF2YS51dGlsLkxpc3Q7DQogaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7 DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9n Z2luZy5Mb2dnZXI7DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KIGltcG9y dCBvcmcuYXJnb3VtbC5jb2duaXRpdmUuQWdlbmN5Ow0KIGltcG9ydCBvcmcuYXJnb3VtbC5jb2du aXRpdmUuQ3JpdGljOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5jb25maWd1cmF0aW9uLkNvbmZpZ3Vy YXRpb247DQpAQCAtNjQsMTQgKzY1LDE0IEBADQogaW1wb3J0IG9yZy5hcmdvdW1sLnVtbC5jb2du aXRpdmUuY3JpdGljcy5Qcm9maWxlR29vZFByYWN0aWNlczsNCiANCiAvKioNCi0gKiBEZWZhdWx0 IDxjb2RlPlByb2ZpbGVNYW5hZ2VyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbg0KKyAqIERlZmF1bHQg PGNvZGU+UHJvZmlsZU1hbmFnZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uLg0KICAqDQogICogQGF1 dGhvciBNYXJjb3MgQXVyZWxpbw0KICAqLw0KIHB1YmxpYyBjbGFzcyBQcm9maWxlTWFuYWdlcklt cGwgaW1wbGVtZW50cyBQcm9maWxlTWFuYWdlciB7DQotICAgIA0KLSAgICBwcml2YXRlIHN0YXRp YyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyLmdldExvZ2dlcigNCi0gICAgICAgICAgICBQcm9m aWxlTWFuYWdlckltcGwuY2xhc3MpOw0KKw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dn ZXIgTE9HID0NCisgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoUHJvZmlsZU1hbmFnZXJJbXBsLmNs YXNzLmdldE5hbWUoKSk7DQogDQogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBESVJF Q1RPUllfU0VQQVJBVE9SID0gIioiOw0KIA0KQEAgLTg4LDEwICs4OSwxMCBAQA0KICAgICAgICAg ICAgIC5tYWtlS2V5KCJwcm9maWxlcyIsICJkaXJlY3RvcmllcyIpOw0KIA0KICAgICAvKioNCi0g ICAgICogQXZvaWRzIHJlY3Vyc2l2ZSBjb25maWd1cmF0aW9uIHVwZGF0ZSB3aGVuIGxvYWRpbmcg Y29uZmlndXJhdGlvbg0KKyAgICAgKiBBdm9pZHMgcmVjdXJzaXZlIGNvbmZpZ3VyYXRpb24gdXBk YXRlIHdoZW4gbG9hZGluZyBjb25maWd1cmF0aW9uLg0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSBi b29sZWFuIGRpc2FibGVDb25maWd1cmF0aW9uVXBkYXRlID0gZmFsc2U7DQotICAgIA0KKw0KICAg ICBwcml2YXRlIExpc3Q8UHJvZmlsZT4gcHJvZmlsZXMgPSBuZXcgQXJyYXlMaXN0PFByb2ZpbGU+ KCk7DQogDQogICAgIHByaXZhdGUgTGlzdDxQcm9maWxlPiBkZWZhdWx0UHJvZmlsZXMgPSBuZXcg QXJyYXlMaXN0PFByb2ZpbGU+KCk7DQpAQCAtOTksOSArMTAwLDkgQEANCiAgICAgcHJpdmF0ZSBM aXN0PFN0cmluZz4gc2VhcmNoRGlyZWN0b3JpZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsN CiANCiAgICAgcHJpdmF0ZSBQcm9maWxlVU1MIHByb2ZpbGVVTUw7DQotICAgIA0KKw0KICAgICBw cml2YXRlIFByb2ZpbGVHb29kUHJhY3RpY2VzIHByb2ZpbGVHb29kUHJhY3RpY2VzOw0KLSAgICAN CisNCiAgICAgcHJpdmF0ZSBQcm9maWxlQ29kZUdlbmVyYXRpb24gcHJvZmlsZUNvZGVHZW5lcmF0 aW9uOw0KIA0KICAgICBwcml2YXRlIERlcGVuZGVuY3lSZXNvbHZlcjxGaWxlPiByZXNvbHZlcjsN CkBAIC0xMTIsMTYgKzExMywxNiBAQA0KICAgICBwdWJsaWMgUHJvZmlsZU1hbmFnZXJJbXBsKCkg ew0KICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICBkaXNhYmxlQ29uZmlndXJhdGlvblVwZGF0 ZSA9IHRydWU7DQotICAgICAgICAgICAgDQorDQogICAgICAgICAgICAgcHJvZmlsZVVNTCA9IG5l dyBQcm9maWxlVU1MKCk7DQogICAgICAgICAgICAgcHJvZmlsZUdvb2RQcmFjdGljZXMgPSBuZXcg UHJvZmlsZUdvb2RQcmFjdGljZXMoKTsNCiAgICAgICAgICAgICBwcm9maWxlQ29kZUdlbmVyYXRp b24gPSBuZXcgUHJvZmlsZUNvZGVHZW5lcmF0aW9uKA0KICAgICAgICAgICAgICAgICAgICAgcHJv ZmlsZUdvb2RQcmFjdGljZXMpOw0KLSAgICAgICAgICAgIA0KKw0KICAgICAgICAgICAgIHJlZ2lz dGVyUHJvZmlsZUludGVybmFsKHByb2ZpbGVVTUwpOw0KLSAgICAgICAgICAgIGFkZFRvRGVmYXVs dFByb2ZpbGVzKHByb2ZpbGVVTUwpOyANCisgICAgICAgICAgICBhZGRUb0RlZmF1bHRQcm9maWxl cyhwcm9maWxlVU1MKTsNCiAgICAgICAgICAgICAgICAgLy8gdGhlIFVNTCBQcm9maWxlIGlzIGFs d2F5cyBwcmVzZW50IGFuZCBkZWZhdWx0DQotICAgICAgICAgICAgDQorDQogICAgICAgICAgICAg Ly8gcmVnaXN0ZXIgdGhlIGJ1aWx0LWluIHByb2ZpbGVzDQogICAgICAgICAgICAgcmVnaXN0ZXJQ cm9maWxlSW50ZXJuYWwocHJvZmlsZUdvb2RQcmFjdGljZXMpOw0KICAgICAgICAgICAgIHJlZ2lz dGVyUHJvZmlsZUludGVybmFsKHByb2ZpbGVDb2RlR2VuZXJhdGlvbik7DQpAQCAtMTUwLDEyICsx NTEsMTcgQEANCiAgICAgICAgICAgICAgICAgICAgICAgICB1ZHAgPSBuZXcgVXNlckRlZmluZWRQ cm9maWxlKGZpbGUsIHByb2ZpbGVNYW5hZ2VyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICBy ZWdpc3RlclByb2ZpbGVJbnRlcm5hbCh1ZHApOw0KICAgICAgICAgICAgICAgICAgICAgICAgIGZv dW5kID0gdHJ1ZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBMT0cuZGVidWcoIlVzZXJEZWZp bmVkUHJvZmlsZSBmb3IgZmlsZSAiDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZmls ZS5nZXRBYnNvbHV0ZVBhdGgoKSArICIgcmVnaXN0ZXJlZC4iKTsNCisNCisgICAgICAgICAgICAg ICAgICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiVXNlckRlZmluZWRQcm9maWxlIGZvciBmaWxlIHswfSByZWdpc3RlcmVkLiIsDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLmdldEFic29sdXRlUGF0aCgpKTsN CisNCiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFByb2ZpbGVFeGNlcHRpb24gZSkgew0K ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgZmls ZSBpcyB1bnVzYWJsZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIExPRy5pbmZvKCJGYWlsZWQg dG8gbG9hZCB1c2VyIGRlZmluZWQgcHJvZmlsZSAiDQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICsgZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSArICIuIiwgZSk7DQorICAgICAgICAgICAgICAg ICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIkZhaWxlZCB0byBsb2FkIHVzZXIgZGVmaW5lZCBwcm9maWxlICINCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICsgZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSArICIuIiwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUpOw0KICAgICAgICAgICAgICAgICAgICAg fQ0KICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDsNCkBA IC0xOTYsMTYgKzIwMiwxOCBAQA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHAgPSBuZXcgVXNlckRlZmluZWRQcm9maWxlKGZpbGUsIHRoaXMpOw0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyUHJvZmlsZUludGVybmFsKHApOw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUHJvZmlsZUV4Y2VwdGlvbiBlKSB7 DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTE9HLmVycm9yKCJFcnJvciBs b2FkaW5nIHByb2ZpbGU6ICIgKyBmaWxlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIkVycm9yIGxvYWRpbmcgcHJvZmlsZTogIiArIGZpbGUsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlKTsNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBlMSkg ew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0cuZXJyb3IoIkludmFsaWQgcGF0aCBm b3IgUHJvZmlsZTogIiArIGZpbGVOYW1lLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBM T0cubG9nKExldmVsLlNFVkVSRSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiSW52YWxpZCBwYXRoIGZvciBQcm9maWxlOiAiICsgZmlsZU5hbWUsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZTEpOw0KICAgICAgICAgICAgICAgICAgICAgICAgIH0g Y2F0Y2ggKFRocm93YWJsZSBlMikgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0cu ZXJyb3IoIkVycm9yIGxvYWRpbmcgcHJvZmlsZTogIiArIGZpbGVOYW1lLA0KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGUyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLA0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBsb2FkaW5nIHByb2ZpbGU6 ICIgKyBmaWxlTmFtZSwgZTIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg ICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVzYy5jaGFyQXQoMCkgPT0gJ0MnKSB7DQogICAgICAg ICAgICAgICAgICAgICAgICAgU3RyaW5nIHByb2ZpbGVJZGVudGlmaWVyID0gZGVzYy5zdWJzdHJp bmcoMSk7DQpAQCAtMjM5LDkgKzI0Nyw5IEBADQogDQogICAgIHByaXZhdGUgdm9pZCBsb2FkRGly ZWN0b3JpZXNGcm9tQ29uZmlndXJhdGlvbigpIHsNCiAgICAgICAgIGRpc2FibGVDb25maWd1cmF0 aW9uVXBkYXRlID0gdHJ1ZTsNCi0gICAgICAgIFN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSAN CisgICAgICAgIFN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPQ0KICAgICAgICAgICAgIG5ldyBT dHJpbmdUb2tlbml6ZXIoDQotICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uLmdldFN0 cmluZyhLRVlfREVGQVVMVF9ESVJFQ1RPUklFUyksIA0KKyAgICAgICAgICAgICAgICAgICAgQ29u ZmlndXJhdGlvbi5nZXRTdHJpbmcoS0VZX0RFRkFVTFRfRElSRUNUT1JJRVMpLA0KICAgICAgICAg ICAgICAgICAgICAgRElSRUNUT1JZX1NFUEFSQVRPUiwgZmFsc2UpOw0KICAgICAgICAgd2hpbGUg KHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsNCiAgICAgICAgICAgICBzZWFyY2hEaXJlY3Rv cmllcy5hZGQodG9rZW5pemVyLm5leHRUb2tlbigpKTsNCkBAIC0yNjYsMjAgKzI3NCwyMCBAQA0K ICAgICBwdWJsaWMgdm9pZCByZWdpc3RlclByb2ZpbGUoUHJvZmlsZSBwKSB7DQogICAgICAgICBp ZiAocmVnaXN0ZXJQcm9maWxlSW50ZXJuYWwocCkpIHsNCiAgICAgICAgICAgICAvLyB0aGlzIHBy b2ZpbGUgY291bGQgaGF2ZSBub3QgYmVlbiBsb2FkZWQgd2hlbg0KLSAgICAgICAgICAgIC8vIHRo ZSBkZWZhdWx0IHByb2ZpbGUgY29uZmlndXJhdGlvbiANCisgICAgICAgICAgICAvLyB0aGUgZGVm YXVsdCBwcm9maWxlIGNvbmZpZ3VyYXRpb24NCiAgICAgICAgICAgICAvLyB3YXMgbG9hZGVkIGF0 IGZpcnN0LCBzbyB3ZSBuZWVkIHRvIGRvIGl0IGFnYWluDQogICAgICAgICAgICAgbG9hZERlZmF1 bHRQcm9maWxlc2Zyb21Db25maWd1cmF0aW9uKCk7DQogICAgICAgICB9DQogICAgICAgICByZXNv bHZlci5yZXNvbHZlKCk7DQogICAgIH0NCi0gICAgDQorDQogICAgIC8qKg0KICAgICAgKiBAcGFy YW0gcCB0aGUgcHJvZmlsZSB0byByZWdpc3Rlci4NCiAgICAgICogQHJldHVybiB0cnVlIGlmIHRo ZXJlIHNob3VsZCBiZSBhbiBhdHRlbXB0IHRvIGxvYWQgdGhlIGRlZmF1bHQgcHJvZmlsZXMNCiAg ICAgICogZnJvbSB0aGUgY29uZmlndXJhdGlvbi4NCiAgICAgICovDQogICAgIHByaXZhdGUgYm9v bGVhbiByZWdpc3RlclByb2ZpbGVJbnRlcm5hbChQcm9maWxlIHApIHsNCi0gICAgICAgIA0KKw0K ICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICBib29sZWFuIGxvYWREZWZhdWx0UHJvZmlsZXNG cm9tQ29uZmlndXJhdGlvbiA9IGZhbHNlOw0KICAgICAgICAgICAgIGlmIChwICE9IG51bGwgJiYg IXByb2ZpbGVzLmNvbnRhaW5zKHApKSB7DQpAQCAtMjk4LDcgKzMwNiw4IEBADQogICAgICAgICAg ICAgcmV0dXJuIGxvYWREZWZhdWx0UHJvZmlsZXNGcm9tQ29uZmlndXJhdGlvbjsNCiAgICAgICAg IH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgew0KICAgICAgICAgICAgIC8vIFRPRE86IEJl dHRlciBpZiB3ZSB3cmFwIGluIGEgUHJvZmlsZUV4Y2VwdGlvbiBhbmQgdGhyb3cgdGhhdA0KLSAg ICAgICAgICAgIExPRy5lcnJvcigiRXJyb3IgcmVnaXN0ZXJpbmcgcHJvZmlsZSAiICsgcC5nZXRE aXNwbGF5TmFtZSgpKTsNCisgICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwNCisgICAg ICAgICAgICAgICAgICAgICJFcnJvciByZWdpc3RlcmluZyBwcm9maWxlICIgKyBwLmdldERpc3Bs YXlOYW1lKCkpOw0KICAgICAgICAgICAgIHRocm93IGU7DQogICAgICAgICB9DQogICAgIH0NCkBA IC0zMjEsMjIgKzMzMCwyMiBAQA0KIA0KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg T0xEX1BST0ZJTEVfUEFDS0FHRSA9ICJvcmcuYXJnb3VtbC51bWwucHJvZmlsZSI7DQogDQotICAg IHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBORVdfUFJPRklMRV9QQUNLQUdFID0gDQorICAg IHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBORVdfUFJPRklMRV9QQUNLQUdFID0NCiAgICAg ICAgICJvcmcuYXJnb3VtbC5wcm9maWxlLmludGVybmFsIjsNCi0gICAgDQorDQogICAgIHB1Ymxp YyBQcm9maWxlIGdldFByb2ZpbGVGb3JDbGFzcyhTdHJpbmcgcHJvZmlsZUNsYXNzKSB7DQogICAg ICAgICBQcm9maWxlIGZvdW5kID0gbnVsbDsNCi0gICAgICAgIA0KKw0KICAgICAgICAgLy8gSWYg d2UgZm91bmQgYW4gb2xkLXN0eWxlIG5hbWUsIHVwZGF0ZSBpdCB0byB0aGUgbmV3IHBhY2thZ2Ug bmFtZQ0KLSAgICAgICAgaWYgKHByb2ZpbGVDbGFzcyAhPSBudWxsIA0KKyAgICAgICAgaWYgKHBy b2ZpbGVDbGFzcyAhPSBudWxsDQogICAgICAgICAgICAgICAgICYmIHByb2ZpbGVDbGFzcy5zdGFy dHNXaXRoKE9MRF9QUk9GSUxFX1BBQ0tBR0UpKSB7DQogICAgICAgICAgICAgcHJvZmlsZUNsYXNz ID0gcHJvZmlsZUNsYXNzLnJlcGxhY2UoT0xEX1BST0ZJTEVfUEFDS0FHRSwNCiAgICAgICAgICAg ICAgICAgICAgIE5FV19QUk9GSUxFX1BBQ0tBR0UpOw0KICAgICAgICAgfQ0KLSAgICAgICAgDQor DQogICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWVzIGRpZG4ndCBjaGFuZ2UgYWdhaW4NCiAg ICAgICAgIGFzc2VydCBwcm9maWxlVU1MLmdldENsYXNzKCkuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgo TkVXX1BST0ZJTEVfUEFDS0FHRSk7DQotICAgICAgICANCisNCiAgICAgICAgIGZvciAoUHJvZmls ZSBwIDogcHJvZmlsZXMpIHsNCiAgICAgICAgICAgICBpZiAocC5nZXRDbGFzcygpLmdldE5hbWUo KS5lcXVhbHMocHJvZmlsZUNsYXNzKSkgew0KICAgICAgICAgICAgICAgICBmb3VuZCA9IHA7DQpA QCAtMzQ3LDcgKzM1Niw3IEBADQogICAgIH0NCiANCiAgICAgcHVibGljIHZvaWQgYWRkVG9EZWZh dWx0UHJvZmlsZXMoUHJvZmlsZSBwKSB7DQotICAgICAgICBpZiAocCAhPSBudWxsICYmIHByb2Zp bGVzLmNvbnRhaW5zKHApIA0KKyAgICAgICAgaWYgKHAgIT0gbnVsbCAmJiBwcm9maWxlcy5jb250 YWlucyhwKQ0KICAgICAgICAgICAgICAgICAmJiAhZGVmYXVsdFByb2ZpbGVzLmNvbnRhaW5zKHAp KSB7DQogICAgICAgICAgICAgZGVmYXVsdFByb2ZpbGVzLmFkZChwKTsNCiAgICAgICAgICAgICB1 cGRhdGVEZWZhdWx0UHJvZmlsZXNDb25maWd1cmF0aW9uKCk7DQpAQCAtMzcyLDcgKzM4MSw4IEBA DQogICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgTW9kZWwuZ2V0WG1pUmVhZGVy KCkuYWRkU2VhcmNoUGF0aChwYXRoKTsNCiAgICAgICAgICAgICB9IGNhdGNoIChVbWxFeGNlcHRp b24gZSkgew0KLSAgICAgICAgICAgICAgICBMT0cuZXJyb3IoIkNvdWxkbid0IHJldHJpdmUgWE1J IFJlYWRlciBmcm9tIE1vZGVsLiIsIGUpOw0KKyAgICAgICAgICAgICAgICBMT0cubG9nKExldmVs LlNFVkVSRSwNCisgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGRuJ3QgcmV0cml2ZSBYTUkg UmVhZGVyIGZyb20gTW9kZWwuIiwgZSk7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KICAg ICB9DQpAQCAtMzg4LDcgKzM5OCw4IEBADQogICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAg ICAgICAgTW9kZWwuZ2V0WG1pUmVhZGVyKCkucmVtb3ZlU2VhcmNoUGF0aChwYXRoKTsNCiAgICAg ICAgICAgICB9IGNhdGNoIChVbWxFeGNlcHRpb24gZSkgew0KLSAgICAgICAgICAgICAgICBMT0cu ZXJyb3IoIkNvdWxkbid0IHJldHJpdmUgWE1JIFJlYWRlciBmcm9tIE1vZGVsLiIsIGUpOw0KKyAg ICAgICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwNCisgICAgICAgICAgICAgICAgICAg ICAgICAiQ291bGRuJ3QgcmV0cml2ZSBYTUkgUmVhZGVyIGZyb20gTW9kZWwuIiwgZSk7DQogICAg ICAgICAgICAgfQ0KICAgICAgICAgfQ0KICAgICB9DQpAQCAtNDYwLDYgKzQ3MSw2IEBADQogICAg ICAgICAgICAgICAgIGMuc2V0RW5hYmxlZCh0cnVlKTsNCiAgICAgICAgICAgICAgICAgQ29uZmln dXJhdGlvbi5zZXRCb29sZWFuKGMuZ2V0Q3JpdGljS2V5KCksIHRydWUpOw0KICAgICAgICAgICAg IH0NCi0gICAgICAgIH0gICAgICAgIA0KKyAgICAgICAgfQ0KICAgICB9DQogfQ0KDQpNb2RpZmll ZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wcm9maWxlL2ludGVybmFs L1Byb2ZpbGVNZXRhLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2Uv YnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wcm9m aWxlL2ludGVybmFsL1Byb2ZpbGVNZXRhLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9 MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdv dW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcHJvZmlsZS9pbnRlcm5hbC9Qcm9maWxlTWV0YS5qYXZh CShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3By b2ZpbGUvaW50ZXJuYWwvUHJvZmlsZU1ldGEuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDAN CkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBD b3B5cmlnaHQgKGMpIDIwMDgsMjAxMCBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5 cmlnaHQgKGMpIDIwMDgtMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmln aHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxz DQogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQ dWJsaWMgTGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRp b24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCkBAIC00NSw4ICs0NSw5IEBADQogaW1wb3J0IGphdmEu dXRpbC5Db2xsZWN0aW9uczsNCiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7DQogaW1wb3J0IGph dmEudXRpbC5TZXQ7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBq YXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9n Z2VyOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5jb2duaXRpdmUuQ3JpdGljOw0KIGltcG9ydCBvcmcu YXJnb3VtbC5jb2duaXRpdmUuVG9Eb0l0ZW07DQogaW1wb3J0IG9yZy5hcmdvdW1sLm1vZGVsLk1v ZGVsOw0KQEAgLTYxLDI0ICs2MiwyNSBAQA0KIA0KIC8qKg0KICAqIE1ldGEgUHJvZmlsZSB3aGlj aCBkZWZpbmVzIHRoZSBUYWdnZWRWYWx1ZXMgdG8gYmUgdXNlZCBpbiBVc2VyIGRlZmluZWQNCi0g KiBQcm9maWxlcw0KLSAqIA0KKyAqIFByb2ZpbGVzLg0KKyAqDQogICogQGF1dGhvciBtYWFzDQog ICovDQogcHVibGljIGNsYXNzIFByb2ZpbGVNZXRhIGV4dGVuZHMgUHJvZmlsZSB7DQogDQotICAg IHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dnZXIuZ2V0TG9nZ2VyKFByb2Zp bGVNZXRhLmNsYXNzKTsNCi0gICAgDQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBM T0cgPQ0KKyAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihQcm9maWxlTWV0YS5jbGFzcy5nZXROYW1l KCkpOw0KKw0KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPRklMRV9GSUxFID0g Im1ldGFwcm9maWxlLnhtaSI7DQogICAgIHByaXZhdGUgUHJvZmlsZVJlZmVyZW5jZSBwcm9maWxl UmVmZXJlbmNlID0gbnVsbDsNCi0gICAgDQorDQogICAgIHByaXZhdGUgQ29sbGVjdGlvbiBtb2Rl bCA9IG51bGw7DQotICAgIA0KKw0KICAgICBTZXQ8Q3JpdGljPiBjcml0aWNzID0gbnVsbDsNCiAN CiAgICAgLyoqDQogICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBwcm9maWxl DQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAdGhyb3dzIFByb2ZpbGVFeGNlcHRpb24gaWYg c29tZXRoaW5nIGdvZXMgd3JvbmcNCiAgICAgICovDQogICAgIHB1YmxpYyBQcm9maWxlTWV0YSgp IHRocm93cyBQcm9maWxlRXhjZXB0aW9uIHsNCkBAIC05Nyw3ICs5OSw4IEBADQogICAgICAgICAg ICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgbW9kZWwgPSBwcm9maWxlTW9kZWxMb2FkZXIubG9h ZE1vZGVsKHByb2ZpbGVSZWZlcmVuY2UpOw0KICAgICAgICAgICAgIH0gY2F0Y2ggKFByb2ZpbGVF eGNlcHRpb24gZSkgew0KLSAgICAgICAgICAgICAgICBMT0cuZXJyb3IoIkV4Y2VwdGlvbiBsb2Fk aW5nIG1ldGFwcm9maWxlICIgKyBQUk9GSUxFX0ZJTEUsIGUpOw0KKyAgICAgICAgICAgICAgICBM T0cubG9nKExldmVsLlNFVkVSRSwNCisgICAgICAgICAgICAgICAgICAgICAgICAiRXhjZXB0aW9u IGxvYWRpbmcgbWV0YXByb2ZpbGUgIiArIFBST0ZJTEVfRklMRSwgZSk7DQogICAgICAgICAgICAg fQ0KIA0KICAgICAgICAgICAgIGlmIChtb2RlbCA9PSBudWxsKSB7DQpAQCAtMTEwLDEwICsxMTMs MTAgQEANCiANCiAgICAgcHJpdmF0ZSB2b2lkIGxvYWRXZWxsRm9ybWVkbmVzc1J1bGVzKCkgew0K ICAgICAgICAgY3JpdGljcyA9IG5ldyBIYXNoU2V0PENyaXRpYz4oKTsNCi0gICAgICAgICAgICAg ICAgDQorDQogICAgICAgICB0cnkgew0KICAgICAgICAgICAgIGNyaXRpY3MuYWRkKG5ldyBDck9D TCgiY29udGV4dCBNb2RlbEVsZW1lbnQgaW52OiAiDQotICAgICAgICAgICAgICAgICAgICArICJz ZWxmLnRhZ2dlZFZhbHVlLT4iIA0KKyAgICAgICAgICAgICAgICAgICAgKyAic2VsZi50YWdnZWRW YWx1ZS0+Ig0KICAgICAgICAgICAgICAgICAgICAgKyAiZXhpc3RzKHh8eC50eXBlLm5hbWU9J0Rl cGVuZGVuY3knKSBpbXBsaWVzICINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJz ZWxmLnN0ZXJlb3R5cGUtPmV4aXN0cyh4fHgubmFtZSA9ICdQcm9maWxlJykiLA0KICAgICAgICAg ICAgICAgICAgIlRoZSAnRGVwZW5kZW5jeScgdGFnIGRlZmluaXRpb24gc2hvdWxkIGJlIGFwcGxp ZWQiDQpAQCAtMTI2LDcgKzEyOSw3IEBADQogDQogICAgICAgICB0cnkgew0KICAgICAgICAgICAg IGNyaXRpY3MuYWRkKG5ldyBDck9DTCgiY29udGV4dCBNb2RlbEVsZW1lbnQgaW52OiAiDQotICAg ICAgICAgICAgICAgICAgICArICJzZWxmLnRhZ2dlZFZhbHVlLT4iIA0KKyAgICAgICAgICAgICAg ICAgICAgKyAic2VsZi50YWdnZWRWYWx1ZS0+Ig0KICAgICAgICAgICAgICAgICAgICAgKyAiZXhp c3RzKHh8eC50eXBlLm5hbWU9J0ZpZ3VyZScpIG9yICINCiAgICAgICAgICAgICAgICAgICAgICsg ImV4aXN0cyh4fHgudHlwZS5uYW1lPSdEZXNjcmlwdGlvbicpIG9yICINCiAgICAgICAgICAgICAg ICAgICAgICsgImV4aXN0cyh4fHgudHlwZS5uYW1lPSdpMThuJykgb3IgIg0KQEAgLTEzOCwxOSAr MTQxLDE5IEBADQogICAgICAgICAgICAgICAgICAgICArICJleGlzdHMoeHx4LnR5cGUubmFtZT0n SGVhZGxpbmUnKSAiDQogICAgICAgICAgICAgICAgICAgICArICJpbXBsaWVzICINCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICArICJzZWxmLnN0ZXJlb3R5cGUtPmV4aXN0cyh4fHgubmFt ZSA9ICdDcml0aWMnKSIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorDQogICAg ICAgICAgICAgICAgICAgICAiTWlzdXNlIG9mIE1ldGFwcm9maWxlIFRhZ2dlZFZhbHVlcyIsDQot ICAgICAgICAgICAgICAgICAgICAiVGhlICdGaWd1cmUnLCAnaTE4bicsICdLbm93bGVkZ2VUeXBl JywgJ01vcmVJbmZvVVJMJywgIiANCi0gICAgICAgICAgICAgICAgICAgICsgIidQcmlvcml0eScs ICdTdXBwb3J0ZWREZWNpc2lvbicsICdEZXNjcmlwdGlvbicgIiANCisgICAgICAgICAgICAgICAg ICAgICJUaGUgJ0ZpZ3VyZScsICdpMThuJywgJ0tub3dsZWRnZVR5cGUnLCAnTW9yZUluZm9VUkwn LCAiDQorICAgICAgICAgICAgICAgICAgICArICInUHJpb3JpdHknLCAnU3VwcG9ydGVkRGVjaXNp b24nLCAnRGVzY3JpcHRpb24nICINCiAgICAgICAgICAgICAgICAgICAgICsgImFuZCAnSGVhZGxp bmUnIHRhZyBkZWZpbml0aW9ucyAiDQogICAgICAgICAgICAgICAgICAgICArICJzaG91bGQgYmUg YXBwbGllZCBvbmx5IHRvIE9DTCBjcml0aWNzLiIsDQotICAgICAgICAgICAgICAgICAgICANCisN CiAgICAgICAgICAgICAgICAgICAgIFRvRG9JdGVtLk1FRF9QUklPUklUWSwgbnVsbCwgbnVsbCwN CiAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vYXJnb3VtbC50aWdyaXMub3JnLyIpKTsNCiAg ICAgICAgIH0gY2F0Y2ggKEludmFsaWRPY2xFeGNlcHRpb24gZSkgew0KICAgICAgICAgICAgIGUu cHJpbnRTdGFja1RyYWNlKCk7DQogICAgICAgICB9DQotICAgICAgICANCisNCiAgICAgICAgIHRy eSB7DQogICAgICAgICAgICAgY3JpdGljcy5hZGQobmV3IENyT0NMKCJjb250ZXh0IFN0ZXJlb3R5 cGUgaW52OiAiDQogICAgICAgICAgICAgICAgICAgICArICJzZWxmLm5hbWVzcGFjZS5zdGVyZW90 eXBlLT5leGlzdHMoeHx4Lm5hbWUgPSAnUHJvZmlsZScpIiwNCkBAIC0xNjUsNyArMTY4LDcgQEAN CiANCiAgICAgICAgIHNldENyaXRpY3MoY3JpdGljcyk7DQogICAgIH0NCi0gICAgDQorDQogICAg IEBPdmVycmlkZQ0KICAgICBwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlOYW1lKCkgew0KICAgICAg ICAgcmV0dXJuICJNZXRhUHJvZmlsZSI7DQpAQCAtMTg1LDcgKzE4OCw3IEBADQogICAgICAgICAg ICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUNvbGxlY3Rpb24obW9kZWwpOw0KICAg ICAgICAgfQ0KICAgICB9DQotICAgIA0KKw0KICAgICBAT3ZlcnJpZGUNCiAgICAgcHVibGljIFNl dDxDcml0aWM+IGdldENyaXRpY3MoKSB7DQogICAgICAgICBpZiAoY3JpdGljcyA9PSBudWxsKSB7 DQpAQCAtMTkzLDUgKzE5Niw1IEBADQogICAgICAgICB9DQogICAgICAgICByZXR1cm4gc3VwZXIu Z2V0Q3JpdGljcygpOw0KICAgICB9DQotICAgIA0KKw0KIH0NCg0KTW9kaWZpZWQ6IHRydW5rL3Ny Yy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcHJvZmlsZS9pbnRlcm5hbC9Qcm9maWxlVU1M LmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291 bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wcm9maWxlL2ludGVybmFs L1Byb2ZpbGVVTUwuamF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkw Nw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9v cmcvYXJnb3VtbC9wcm9maWxlL2ludGVybmFsL1Byb2ZpbGVVTUwuamF2YQkob3JpZ2luYWwpDQor KysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wcm9maWxlL2ludGVybmFs L1Byb2ZpbGVVTUwuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBA QA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIw MDgsMjAxMCBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgt MjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBU aGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUg YXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2 MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFp bGFibGUgYXQNCkBAIC00Niw4ICs0Niw5IEBADQogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9u czsNCiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7DQogaW1wb3J0IGphdmEudXRpbC5TZXQ7DQor aW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2lu Zy5Mb2dnZXI7DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KIGltcG9ydCBv cmcuYXJnb3VtbC5jb2duaXRpdmUuQ3JpdGljOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5jb2duaXRp dmUuVG9Eb0l0ZW07DQogaW1wb3J0IG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5UcmFuc2xhdG9yOw0K QEAgLTk2LDMxICs5NywzMiBAQA0KIGltcG9ydCBvcmcuYXJnb3VtbC51bWwuY29nbml0aXZlLmNy aXRpY3MuQ3JPcHBFbmRWc0F0dHI7DQogDQogLyoqDQotICogVGhpcyBjbGFzcyByZXByZXNlbnRz IHRoZSBkZWZhdWx0IFVNTCBwcm9maWxlDQorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBk ZWZhdWx0IFVNTCBwcm9maWxlLg0KICAqDQogICogQGF1dGhvciBtYXVyZWxpbzEyMzQNCiAgKi8N CiBwdWJsaWMgY2xhc3MgUHJvZmlsZVVNTCBleHRlbmRzIFByb2ZpbGUgew0KLSAgICANCi0gICAg cHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoUHJvZmls ZVVNTC5jbGFzcyk7DQotICAgIA0KKw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIg TE9HID0NCisgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoUHJvZmlsZVVNTC5jbGFzcy5nZXROYW1l KCkpOw0KKw0KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPRklMRV9VTUwxNF9G SUxFID0gImRlZmF1bHQtdW1sMTQueG1pIjsNCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3Ry aW5nIFBST0ZJTEVfVU1MMjJfRklMRSA9ICJkZWZhdWx0LXVtbDIyLnhtaSI7DQogDQogICAgIHN0 YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9VTUwxNCA9ICJVTUwgMS40IjsNCiAgICAgc3RhdGljIGZp bmFsIFN0cmluZyBOQU1FX1VNTDIyID0gIlVNTCAyLjIiOw0KLSAgICANCisNCiAgICAgcHJpdmF0 ZSBGb3JtYXRpbmdTdHJhdGVneSBmb3JtYXRpbmdTdHJhdGVneTsNCiAgICAgcHJpdmF0ZSBQcm9m aWxlTW9kZWxMb2FkZXIgcHJvZmlsZU1vZGVsTG9hZGVyOw0KICAgICBwcml2YXRlIENvbGxlY3Rp b24gbW9kZWw7DQotICAgIA0KKw0KICAgICBwcml2YXRlIFNldDxDcml0aWM+IGNyaXRpY3MgPSBu dWxsOw0KIA0KICAgICBwcml2YXRlIFByb2ZpbGVSZWZlcmVuY2UgcHJvZmlsZVJlZmVyZW5jZSA9 IG51bGw7DQogDQogICAgIC8qKg0KLSAgICAgKiBDb25zdHJ1Y3QgYSBQcm9maWxlIGZvciBVTUwg bW9kZWxpbmcuIA0KLSAgICAgKiBAdGhyb3dzIFByb2ZpbGVFeGNlcHRpb24gDQorICAgICAqIENv bnN0cnVjdCBhIFByb2ZpbGUgZm9yIFVNTCBtb2RlbGluZy4NCisgICAgICogQHRocm93cyBQcm9m aWxlRXhjZXB0aW9uDQogICAgICAqLw0KICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2Vk IikNCiAgICAgUHJvZmlsZVVNTCgpIHRocm93cyBQcm9maWxlRXhjZXB0aW9uIHsNCkBAIC0xNDgs NyArMTUwLDcgQEANCiAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAg IG1vZGVsID0gcHJvZmlsZU1vZGVsTG9hZGVyLmxvYWRNb2RlbChwcm9maWxlUmVmZXJlbmNlKTsN CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUHJvZmlsZUV4Y2VwdGlvbiBlKSB7DQotICAgICAg ICAgICAgICAgICAgICBMT0cuZXJyb3IoIkVycm9yIGxvYWRpbmcgVU1MIHByb2ZpbGUiLCBlKTsN CisgICAgICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiRXJyb3IgbG9hZGlu ZyBVTUwgcHJvZmlsZSIsIGUpOw0KICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfSBl bHNlIHsNCiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBvdXIgb3duIFVNTDIgcHJvZmlsZSwg YnV0IGl0IGlzIG5vdCB1c2VkLiBJbnN0ZWFkLA0KQEAgLTE2OCw3ICsxNzAsNyBAQA0KIA0KICAg ICBwcml2YXRlIHZvaWQgbG9hZFdlbGxGb3JtZWRuZXNzUnVsZXMoKSB7DQogICAgICAgICBjcml0 aWNzID0gbmV3IEhhc2hTZXQ8Q3JpdGljPigpOw0KLSAgICAgICAgDQorDQogICAgICAgICBjcml0 aWNzLmFkZChuZXcgQ3JBc3NvY05hbWVDb25mbGljdCgpKTsNCiAgICAgICAgIGNyaXRpY3MuYWRk KG5ldyBDckF0dHJOYW1lQ29uZmxpY3QoKSk7DQogICAgICAgICBjcml0aWNzLmFkZChuZXcgQ3JD aXJjdWxhckFzc29jQ2xhc3MoKSk7DQpAQCAtMTg0LDcgKzE4Niw3IEBADQogICAgICAgICBjcml0 aWNzLmFkZChuZXcgQ3JJbnZhbGlkSm9pblRyaWdnZXJPckd1YXJkKCkpOw0KICAgICAgICAgY3Jp dGljcy5hZGQobmV3IENySW52YWxpZFBzZXVkb1N0YXRlVHJpZ2dlcigpKTsNCiAgICAgICAgIGNy aXRpY3MuYWRkKG5ldyBDckludmFsaWRJbml0aWFsKCkpOw0KLSAgICAgICAgDQorDQogICAgICAg ICBjcml0aWNzLmFkZChuZXcgQ3JJbnZhbGlkSm9pbigpKTsNCiAgICAgICAgIGNyaXRpY3MuYWRk KG5ldyBDckludmFsaWRGb3JrKCkpOw0KICAgICAgICAgY3JpdGljcy5hZGQobmV3IENySW52YWxp ZEJyYW5jaCgpKTsNCkBAIC0yMDEsMTQgKzIwMywxNCBAQA0KICAgICAgICAgY3JpdGljcy5hZGQo bmV3IENyTXVsdGlwbGVBZ2coKSk7DQogICAgICAgICBjcml0aWNzLmFkZChuZXcgQ3JOV2F5QWdn KCkpOw0KICAgICAgICAgY3JpdGljcy5hZGQobmV3IENyTmFtZUNvbmZsaWN0QUMoKSk7DQotICAg ICAgICANCisNCiAgICAgICAgIGNyaXRpY3MuYWRkKG5ldyBDck9wcEVuZENvbmZsaWN0KCkpOw0K ICAgICAgICAgY3JpdGljcy5hZGQobmV3IENyTXVsdGlDb21wb3NpdGUoKSk7DQogICAgICAgICBj cml0aWNzLmFkZChuZXcgQ3JOYW1lQ29uZmxpY3QoKSk7DQogICAgICAgICBjcml0aWNzLmFkZChu ZXcgQ3JPcHBFbmRWc0F0dHIoKSk7DQogDQogICAgICAgICAvLyBNaXNzaW5nIFdGUnMNCi0gICAg ICAgIA0KKw0KICAgICAgICAgLy8gQXNzb2NpYXRpb24gQ2xhc3MNCiAgICAgICAgIC8vIDQuNS4z LjIgWzFdDQogICAgICAgICAvKiBUZXN0aW5nOiBkb2VzIG5vdCBmaXJlLiAqLw0KQEAgLTIyNCw3 ICsyMjYsNyBAQA0KICAgICAgICAgfSBjYXRjaCAoSW52YWxpZE9jbEV4Y2VwdGlvbiBlKSB7DQog ICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsNCiAgICAgICAgIH0NCi0gICAgICAgIA0K Kw0KICAgICAgICAgLy8gNC41LjMuMiBbMl0NCiAgICAgICAgIC8qIFRlc3Rpbmc6IFdvcmtzIE9r LiAqLw0KICAgICAgICAgdHJ5IHsNCkBAIC0yMzcsMTIgKzIzOSwxMiBAQA0KICAgICAgICAgfSBj YXRjaCAoSW52YWxpZE9jbEV4Y2VwdGlvbiBlKSB7DQogICAgICAgICAgICAgZS5wcmludFN0YWNr VHJhY2UoKTsNCiAgICAgICAgIH0NCi0gICAgICAgIA0KKw0KICAgICAgICAgLy8gQmVoYXZpb3Jh bCBGZWF0dXJlDQogICAgICAgICAvLyA0LjUuMy41IFsyXQ0KIA0KLSAgICAgICAgLy8gaXQgd29y a3MsIGJ1dCBhIGJ1ZyBpbiBuYW1lc3BhY2UuY29udGVudHMgcHJldmVudHMgaXQgZnJvbSANCi0g ICAgICAgIC8vIHdvcmtpbmcgd2hlbiB0aGUgdHlwZSBvZiB0aGUgcGFyYW1ldGVyIGNvbWVzIGZy b20gYSBwcm9maWxlICAgICAgICAgDQorICAgICAgICAvLyBpdCB3b3JrcywgYnV0IGEgYnVnIGlu IG5hbWVzcGFjZS5jb250ZW50cyBwcmV2ZW50cyBpdCBmcm9tDQorICAgICAgICAvLyB3b3JraW5n IHdoZW4gdGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlciBjb21lcyBmcm9tIGEgcHJvZmlsZQ0KIC8v ICAgICAgICB0cnkgew0KIC8vICAgICAgICAgICAgQWdlbmN5LnJlZ2lzdGVyKG5ldyBDck9DTCgi Y29udGV4dCBCZWhhdmlvcmFsRmVhdHVyZSBpbnY6Ig0KIC8vICAgICAgICAgICAgICAgICAgICAr ICJzZWxmLnBhcmFtZXRlci0+Ig0KQEAgLTI1NSwxOSArMjU3LDE5IEBADQogLy8gICAgICAgIH0g Y2F0Y2ggKEludmFsaWRPY2xFeGNlcHRpb24gZSkgew0KIC8vICAgICAgICAgICAgZS5wcmludFN0 YWNrVHJhY2UoKTsNCiAvLyAgICAgICAgfQ0KLSAgICAgICAgDQorDQogICAgICAgICAvLyBDbGFz c2lmaWVyDQogICAgICAgICAvLyA0LjUuMy44IFs1XQ0KICAgICAgICAgLyogVE9ETzogUGFydGx5 IG92ZXJsYXBzIENyT3BwRW5kVnNBdHRyLiAqLw0KICAgICAgICAgLyogVGVzdGluZzogZG9lcyBu b3QgZmlyZS4gKi8NCiAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgY3JpdGljcy5hZGQobmV3 IENyT0NMKCJjb250ZXh0IENsYXNzaWZpZXIgaW52OiINCi0gICAgICAgICAgICAgICAgICAgICsg InNlbGYub3Bwb3NpdGVBc3NvY2lhdGlvbkVuZHMtPiIgDQotICAgICAgICAgICAgICAgICAgICAr ICJmb3JBbGwoIG8gfCBub3Qgc2VsZi5hbGxBdHRyaWJ1dGVzLT4iIA0KLSAgICAgICAgICAgICAg ICAgICAgKyAidW5pb24gKHNlbGYuYWxsQ29udGVudHMpLT4iIA0KKyAgICAgICAgICAgICAgICAg ICAgKyAic2VsZi5vcHBvc2l0ZUFzc29jaWF0aW9uRW5kcy0+Ig0KKyAgICAgICAgICAgICAgICAg ICAgKyAiZm9yQWxsKCBvIHwgbm90IHNlbGYuYWxsQXR0cmlidXRlcy0+Ig0KKyAgICAgICAgICAg ICAgICAgICAgKyAidW5pb24gKHNlbGYuYWxsQ29udGVudHMpLT4iDQogICAgICAgICAgICAgICAg ICAgICArICJjb2xsZWN0ICggcSB8IHEubmFtZSApLT5pbmNsdWRlcyAoby5uYW1lKSApIiwNCi0g ICAgICAgICAgICAgICAgVHJhbnNsYXRvci5sb2NhbGl6ZSgid2ZyLlVNTDE0Mi5DbGFzc2lmaWVy LjUtaGVhZCIpLCANCi0gICAgICAgICAgICAgICAgVHJhbnNsYXRvci5sb2NhbGl6ZSgid2ZyLlVN TDE0Mi5DbGFzc2lmaWVyLjUtZGVzYyIpLCANCisgICAgICAgICAgICAgICAgVHJhbnNsYXRvci5s b2NhbGl6ZSgid2ZyLlVNTDE0Mi5DbGFzc2lmaWVyLjUtaGVhZCIpLA0KKyAgICAgICAgICAgICAg ICBUcmFuc2xhdG9yLmxvY2FsaXplKCJ3ZnIuVU1MMTQyLkNsYXNzaWZpZXIuNS1kZXNjIiksDQog ICAgICAgICAgICAgICAgIFRvRG9JdGVtLkhJR0hfUFJJT1JJVFksIG51bGwsIG51bGwsICJodHRw Oi8vd3d3LnVtbC5vcmcvIikpOw0KICAgICAgICAgfSBjYXRjaCAoSW52YWxpZE9jbEV4Y2VwdGlv biBlKSB7DQogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsNCkBAIC0zMTMsNyArMzE1 LDcgQEANCiAgICAgICAgIH0gY2F0Y2ggKEludmFsaWRPY2xFeGNlcHRpb24gZSkgew0KICAgICAg ICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7DQogICAgICAgICB9DQotIA0KKw0KICAgICAgICAg Ly8gTmFtZXNwYWNlDQogICAgICAgICAvLyA0LjUuMy4yNiBbMl0NCiAgICAgICAgIC8qIFRlc3Rp bmc6IERvZXMgbm90IGZpcmUuIENvbmZsaWN0IHdpdGggQ3JOYW1lQ29uZmxpY3QuICovDQpAQCAt MzQwLDcgKzM0Miw3IEBADQogICAgICAgICAgICAgICAgICAgICArICJzZWxmLmFzc29jaWF0aW9u cy0+Zm9yQWxsKGEgfCAiDQogICAgICAgICAgICAgICAgICAgICArICJhLmNvbm5lY3Rpb24tPnNp emUgPSAyKSIsDQogICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdG9yLmxvY2FsaXplKCJ3ZnIu VU1MMTQyLkFjdG9yLjFhLWhlYWQiKSwNCi0gICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0b3Iu bG9jYWxpemUoIndmci5VTUwxNDIuQWN0b3IuMWEtZGVzYyIpLCANCisgICAgICAgICAgICAgICAg ICAgIFRyYW5zbGF0b3IubG9jYWxpemUoIndmci5VTUwxNDIuQWN0b3IuMWEtZGVzYyIpLA0KICAg ICAgICAgICAgICAgICAgICAgVG9Eb0l0ZW0uSElHSF9QUklPUklUWSwgbnVsbCwgbnVsbCwNCiAg ICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LnVtbC5vcmcvIikpOw0KICAgICAgICAgfSBj YXRjaCAoSW52YWxpZE9jbEV4Y2VwdGlvbiBlKSB7DQpAQCAtMzU2LDcgKzM1OCw3IEBADQogICAg ICAgICAgICAgICAgICAgICArICJyLnR5cGUub2NsSXNLaW5kT2YoU3Vic3lzdGVtKSBvciAiDQog ICAgICAgICAgICAgICAgICAgICArICJyLnR5cGUub2NsSXNLaW5kT2YoQ2xhc3MpKSkiLA0KICAg ICAgICAgICAgICAgICAgICAgVHJhbnNsYXRvci5sb2NhbGl6ZSgid2ZyLlVNTDE0Mi5BY3Rvci4x Yi1oZWFkIiksDQotICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdG9yLmxvY2FsaXplKCJ3ZnIu VU1MMTQyLkFjdG9yLjFiLWRlc2MiKSwgDQorICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdG9y LmxvY2FsaXplKCJ3ZnIuVU1MMTQyLkFjdG9yLjFiLWRlc2MiKSwNCiAgICAgICAgICAgICAgICAg ICAgIFRvRG9JdGVtLkhJR0hfUFJJT1JJVFksIG51bGwsIG51bGwsDQogICAgICAgICAgICAgICAg ICAgICAiaHR0cDovL3d3dy51bWwub3JnLyIpKTsNCiAgICAgICAgIH0gY2F0Y2ggKEludmFsaWRP Y2xFeGNlcHRpb24gZSkgew0KQEAgLTM3MCw3ICszNzIsNyBAQA0KICAgICAgICAgICAgIGNyaXRp Y3MuYWRkKG5ldyBDck9DTCgiY29udGV4dCBBY3RvciBpbnY6Ig0KICAgICAgICAgICAgICAgICAg ICAgKyAic2VsZi5jb250ZW50cy0+aXNFbXB0eSIsDQogICAgICAgICAgICAgICAgICAgICBUcmFu c2xhdG9yLmxvY2FsaXplKCJ3ZnIuVU1MMTQyLkFjdG9yLjItaGVhZCIpLA0KLSAgICAgICAgICAg ICAgICAgICAgVHJhbnNsYXRvci5sb2NhbGl6ZSgid2ZyLlVNTDE0Mi5BY3Rvci4yLWRlc2MiKSwg DQorICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdG9yLmxvY2FsaXplKCJ3ZnIuVU1MMTQyLkFj dG9yLjItZGVzYyIpLA0KICAgICAgICAgICAgICAgICAgICAgVG9Eb0l0ZW0uSElHSF9QUklPUklU WSwgbnVsbCwgbnVsbCwNCiAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LnVtbC5vcmcv IikpOw0KICAgICAgICAgfSBjYXRjaCAoSW52YWxpZE9jbEV4Y2VwdGlvbiBlKSB7DQpAQCAtMzg0 LDcgKzM4Niw3IEBADQogICAgICAgICAgICAgY3JpdGljcy5hZGQobmV3IENyT0NMKCJjb250ZXh0 IFVzZUNhc2UgaW52OiINCiAgICAgICAgICAgICAgICAgICAgICsgInNlbGYuYXNzb2NpYXRpb25z LT5mb3JBbGwoYSB8IGEuY29ubmVjdGlvbi0+c2l6ZSA9IDIpIiwNCiAgICAgICAgICAgICAgICAg ICAgIFRyYW5zbGF0b3IubG9jYWxpemUoIndmci5VTUwxNDIuVXNlQ2FzZS4xLWhlYWQiKSwNCi0g ICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0b3IubG9jYWxpemUoIndmci5VTUwxNDIuVXNlQ2Fz ZS4xLWRlc2MiKSwgDQorICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdG9yLmxvY2FsaXplKCJ3 ZnIuVU1MMTQyLlVzZUNhc2UuMS1kZXNjIiksDQogICAgICAgICAgICAgICAgICAgICBUb0RvSXRl bS5ISUdIX1BSSU9SSVRZLCBudWxsLCBudWxsLA0KICAgICAgICAgICAgICAgICAgICAgImh0dHA6 Ly93d3cudW1sLm9yZy8iKSk7DQogICAgICAgICB9IGNhdGNoIChJbnZhbGlkT2NsRXhjZXB0aW9u IGUpIHsNCkBAIC00MDcsNyArNDA5LDcgQEANCiAgICAgICAgICAgICAgICAgICAgICsgInMudHlw ZS5zcGVjaWZpY2F0aW9uUGF0aCkpICINCiAgICAgICAgICAgICAgICAgICAgICsgIikpIiwNCiAg ICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0b3IubG9jYWxpemUoIndmci5VTUwxNDIuVXNlQ2Fz ZS4yLWhlYWQiKSwNCi0gICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0b3IubG9jYWxpemUoIndm ci5VTUwxNDIuVXNlQ2FzZS4yLWRlc2MiKSwgDQorICAgICAgICAgICAgICAgICAgICBUcmFuc2xh dG9yLmxvY2FsaXplKCJ3ZnIuVU1MMTQyLlVzZUNhc2UuMi1kZXNjIiksDQogICAgICAgICAgICAg ICAgICAgICBUb0RvSXRlbS5ISUdIX1BSSU9SSVRZLCBudWxsLCBudWxsLA0KICAgICAgICAgICAg ICAgICAgICAgImh0dHA6Ly93d3cudW1sLm9yZy8iKSk7DQogICAgICAgICB9IGNhdGNoIChJbnZh bGlkT2NsRXhjZXB0aW9uIGUpIHsNCkBAIC00MjEsNyArNDIzLDcgQEANCiAgICAgICAgICAgICBj cml0aWNzLmFkZChuZXcgQ3JPQ0woImNvbnRleHQgVXNlQ2FzZSBpbnY6Ig0KICAgICAgICAgICAg ICAgICAgICAgKyAic2VsZi5jb250ZW50cy0+aXNFbXB0eSIsDQogICAgICAgICAgICAgICAgICAg ICBUcmFuc2xhdG9yLmxvY2FsaXplKCJ3ZnIuVU1MMTQyLlVzZUNhc2UuMy1oZWFkIiksDQotICAg ICAgICAgICAgICAgICAgICBUcmFuc2xhdG9yLmxvY2FsaXplKCJ3ZnIuVU1MMTQyLlVzZUNhc2Uu My1kZXNjIiksIA0KKyAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRvci5sb2NhbGl6ZSgid2Zy LlVNTDE0Mi5Vc2VDYXNlLjMtZGVzYyIpLA0KICAgICAgICAgICAgICAgICAgICAgVG9Eb0l0ZW0u SElHSF9QUklPUklUWSwgbnVsbCwgbnVsbCwNCiAgICAgICAgICAgICAgICAgICAgICJodHRwOi8v d3d3LnVtbC5vcmcvIikpOw0KICAgICAgICAgfSBjYXRjaCAoSW52YWxpZE9jbEV4Y2VwdGlvbiBl KSB7DQpAQCAtNDMwLDcgKzQzMiw3IEBADQogDQogICAgICAgICAvLyBVc2VDYXNlDQogICAgICAg ICAvLyA0LjExLjMuNSBbNF0NCi0gICAgICAgIC8qIFRlc3RlZCBPSywgZXhjZXB0IGluIHNvbWUg Y2FzZXMsIGRlcGVuZGluZyBvbiB0aGUgDQorICAgICAgICAvKiBUZXN0ZWQgT0ssIGV4Y2VwdCBp biBzb21lIGNhc2VzLCBkZXBlbmRpbmcgb24gdGhlDQogICAgICAgICAgKiBzZXF1ZW5jZSBvZiB0 aGUgRVBzLiBQcm9iYWJseSB0aGUgaW1wbGVtZW50YXRpb24gb2YNCiAgICAgICAgICAqICJmb3JB bGwgKHgsIHkgfCAuLi4iIGRvZXMgbm90IGNvdmVyIGFsbCBjb21iaW5hdGlvbnMuICovDQogICAg ICAgICB0cnkgew0KQEAgLTQzOCw3ICs0NDAsNyBAQA0KICAgICAgICAgICAgICAgICAgICAgKyAi c2VsZi5hbGxFeHRlbnNpb25Qb2ludHMgLT4gZm9yQWxsICh4LCB5IHwgIg0KICAgICAgICAgICAg ICAgICAgICAgKyAieC5uYW1lID0geS5uYW1lIGltcGxpZXMgeCA9IHkgKSIsDQogICAgICAgICAg ICAgICAgICAgICBUcmFuc2xhdG9yLmxvY2FsaXplKCJ3ZnIuVU1MMTQyLlVzZUNhc2UuNC1oZWFk IiksDQotICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdG9yLmxvY2FsaXplKCJ3ZnIuVU1MMTQy LlVzZUNhc2UuNC1kZXNjIiksIA0KKyAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRvci5sb2Nh bGl6ZSgid2ZyLlVNTDE0Mi5Vc2VDYXNlLjQtZGVzYyIpLA0KICAgICAgICAgICAgICAgICAgICAg VG9Eb0l0ZW0uSElHSF9QUklPUklUWSwgbnVsbCwgbnVsbCwNCiAgICAgICAgICAgICAgICAgICAg ICJodHRwOi8vd3d3LnVtbC5vcmcvIikpOw0KICAgICAgICAgfSBjYXRjaCAoSW52YWxpZE9jbEV4 Y2VwdGlvbiBlKSB7DQpAQCAtNDUyLDcgKzQ1NCw3IEBADQogICAgICAgICAgICAgY3JpdGljcy5h ZGQobmV3IENyT0NMKCJjb250ZXh0IEFjdGlvblN0YXRlIGludjoiDQogICAgICAgICAgICAgICAg ICAgICArICJzZWxmLm91dGdvaW5nLT5mb3JBbGwodCB8IHQudHJpZ2dlci0+c2l6ZSA9IDApIiwN CiAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0b3IubG9jYWxpemUoIndmci5VTUwxNDIuQWN0 aW9uU3RhdGUuMy1oZWFkIiksDQotICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdG9yLmxvY2Fs aXplKCJ3ZnIuVU1MMTQyLkFjdGlvblN0YXRlLjMtZGVzYyIpLCANCisgICAgICAgICAgICAgICAg ICAgIFRyYW5zbGF0b3IubG9jYWxpemUoIndmci5VTUwxNDIuQWN0aW9uU3RhdGUuMy1kZXNjIiks DQogICAgICAgICAgICAgICAgICAgICBUb0RvSXRlbS5ISUdIX1BSSU9SSVRZLCBudWxsLCBudWxs LA0KICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly93d3cudW1sLm9yZy8iKSk7DQogICAgICAg ICB9IGNhdGNoIChJbnZhbGlkT2NsRXhjZXB0aW9uIGUpIHsNCkBAIC00ODMsMTIgKzQ4NSwxMiBA QA0KICAgICAgICAgfQ0KICAgICAgICAgcmV0dXJuIHN1cGVyLmdldENyaXRpY3MoKTsNCiAgICAg fQ0KLSAgICANCisNCiAgICAgQE92ZXJyaWRlDQogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldFBy b2ZpbGVQYWNrYWdlcygpIHsNCiAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFi bGVDb2xsZWN0aW9uKGdldE1vZGVsKCkpOw0KICAgICB9DQotICAgIA0KKw0KIA0KICAgICBAT3Zl cnJpZGUNCiAgICAgcHVibGljIENvbGxlY3Rpb248T2JqZWN0PiBnZXRMb2FkZWRQYWNrYWdlcygp IHsNCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcHJv ZmlsZS9pbnRlcm5hbC9vY2wvQ29tcHV0ZURlc2lnbk1hdGVyaWFscy5qYXZhDQpVcmw6IGh0dHA6 Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdv dW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcHJvZmlsZS9pbnRlcm5hbC9vY2wvQ29tcHV0ZURlc2ln bk1hdGVyaWFscy5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3 DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29y Zy9hcmdvdW1sL3Byb2ZpbGUvaW50ZXJuYWwvb2NsL0NvbXB1dGVEZXNpZ25NYXRlcmlhbHMuamF2 YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9w cm9maWxlL2ludGVybmFsL29jbC9Db21wdXRlRGVzaWduTWF0ZXJpYWxzLmphdmEJMjAxMi0xMi0z MCAwNTowNjowMS0wODAwDQpAQCAtMSw2ICsxLDYgQEANCiAvKiAkSWQkDQogICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA5IENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxv dw0KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEyIENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0K ICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWlu ZyBtYXRlcmlhbHMNCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlz IGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KQEAgLTQxLDggKzQxLDkgQEANCiBp bXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOw0KIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNl dDsNCiBpbXBvcnQgamF2YS51dGlsLlNldDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2 ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiANCi1pbXBvcnQgb3JnLmFw YWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLm1vZGVsLk1ldGFUeXBlczsN CiBpbXBvcnQgb3JnLmFyZ291bWwubW9kZWwuTW9kZWw7DQogDQpAQCAtNTAsOCArNTEsOCBAQA0K IGltcG9ydCB0dWRyZXNkZW4ub2NsLnBhcnNlci5ub2RlLkFDbGFzc2lmaWVyQ29udGV4dDsNCiAN CiAvKioNCi0gKiBDaGVjayB0aGUgZGVzaWduIG1hdGVyaWFscyByZWxhdGVkIHRvIHRoaXMgT0NM DQotICogDQorICogQ2hlY2sgdGhlIGRlc2lnbiBtYXRlcmlhbHMgcmVsYXRlZCB0byB0aGlzIE9D TC4NCisgKg0KICAqIEBhdXRob3IgbWF1cmVsaW8xMjM0DQogICovDQogcHVibGljIGNsYXNzIENv bXB1dGVEZXNpZ25NYXRlcmlhbHMgZXh0ZW5kcyBEZXB0aEZpcnN0QWRhcHRlciB7DQpAQCAtNTks OCArNjAsOCBAQA0KICAgICAvKioNCiAgICAgICogTG9nZ2VyLg0KICAgICAgKi8NCi0gICAgcHJp dmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IA0KLSAgICAgICAgTG9nZ2VyLmdldExvZ2dl cihDb21wdXRlRGVzaWduTWF0ZXJpYWxzLmNsYXNzKTsNCisgICAgcHJpdmF0ZSBzdGF0aWMgZmlu YWwgTG9nZ2VyIExPRyA9DQorICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKENvbXB1dGVEZXNpZ25N YXRlcmlhbHMuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgcHJpdmF0ZSBTZXQ8T2JqZWN0PiBk bXMgPSBuZXcgSGFzaFNldDxPYmplY3Q+KCk7DQogDQpAQCAtNzAsMTEgKzcxLDExIEBADQogICAg IEBPdmVycmlkZQ0KICAgICBwdWJsaWMgdm9pZCBjYXNlQUNsYXNzaWZpZXJDb250ZXh0KEFDbGFz c2lmaWVyQ29udGV4dCBub2RlKSB7DQogICAgICAgICBTdHJpbmcgc3RyID0gKCIiICsgbm9kZS5n ZXRQYXRoVHlwZU5hbWUoKSkudHJpbSgpOw0KLSAgICAgICAgDQorDQogICAgICAgICAvLyBUT0RP OiBUaGlzIGFwcGVhcnMgdW51c2VkLiAgSWYgaXQncyBuZWVkZWQsIHRoZSBNb2RlbCBBUEkgc2hv dWxkDQogICAgICAgICAvLyBiZSBlbmhhbmNlZCB0byBwcm92aWRlIGEgbWV0aG9kIHRoYXQgZG9l cyB0aGlzIGRpcmVjdGx5Lg0KICAgICAgICAgaWYgKHN0ci5lcXVhbHMoIkNsYXNzIikpIHsNCi0g ICAgICAgICAgICBkbXMuYWRkKE1vZGVsLmdldE1ldGFUeXBlcygpLmdldFVNTENsYXNzKCkpOyAg ICAgICAgICAgIA0KKyAgICAgICAgICAgIGRtcy5hZGQoTW9kZWwuZ2V0TWV0YVR5cGVzKCkuZ2V0 VU1MQ2xhc3MoKSk7DQogICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgIHRyeSB7DQogICAg ICAgICAgICAgICAgIE1ldGhvZCBtID0gTWV0YVR5cGVzLmNsYXNzLmdldERlY2xhcmVkTWV0aG9k KCJnZXQiICsgc3RyLA0KQEAgLTgzLDcgKzg0LDcgQEANCiAgICAgICAgICAgICAgICAgICAgIGRt cy5hZGQobS5pbnZva2UoTW9kZWwuZ2V0TWV0YVR5cGVzKCksIG5ldyBPYmplY3RbMF0pKTsNCiAg ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQot ICAgICAgICAgICAgICAgIExPRy5lcnJvcigiTWV0YWNsYXNzIG5vdCBmb3VuZDogIiArIHN0ciwg ZSk7DQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiTWV0YWNsYXNzIG5v dCBmb3VuZDogIiArIHN0ciwgZSk7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KICAgICB9 DQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3Byb2Zp bGUvaW50ZXJuYWwvb2NsL0RlZmF1bHRPY2xFdmFsdWF0b3IuamF2YQ0KVXJsOiBodHRwOi8vYXJn b3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9zcmMvYXJnb3VtbC1h cHAvc3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUvaW50ZXJuYWwvb2NsL0RlZmF1bHRPY2xFdmFsdWF0 b3IuamF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3Vt bC9wcm9maWxlL2ludGVybmFsL29jbC9EZWZhdWx0T2NsRXZhbHVhdG9yLmphdmEJKG9yaWdpbmFs KQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvcHJvZmlsZS9pbnRl cm5hbC9vY2wvRGVmYXVsdE9jbEV2YWx1YXRvci5qYXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgw MA0KQEAgLTEsNiArMSw2IEBADQogLyogJElkJA0KICAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAq IENvcHlyaWdodCAoYykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmln aHQgKGMpIDIwMDktMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRz IHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQog ICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJs aWMgTGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24s IGFuZCBpcyBhdmFpbGFibGUgYXQNCkBAIC00MSwyOCArNDEsMjcgQEANCiBpbXBvcnQgamF2YS5p by5QdXNoYmFja1JlYWRlcjsNCiBpbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7DQogaW1wb3J0 IGphdmEudXRpbC5NYXA7DQotDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KKy8v aW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiANCiBpbXBvcnQgdHVkcmVzZGVuLm9j bC5wYXJzZXIuT2NsUGFyc2VyOw0KIGltcG9ydCB0dWRyZXNkZW4ub2NsLnBhcnNlci5sZXhlci5M ZXhlcjsNCiBpbXBvcnQgdHVkcmVzZGVuLm9jbC5wYXJzZXIubm9kZS5TdGFydDsNCiANCiAvKioN Ci0gKiBFdmFsdWF0ZXMgb2NsIGV4cHJlc3Npb25zDQorICogRXZhbHVhdGVzIG9jbCBleHByZXNz aW9ucy4NCiAgKg0KICAqIEBhdXRob3IgbWF1cmVsaW8xMjM0DQogICovDQogcHVibGljIGNsYXNz IERlZmF1bHRPY2xFdmFsdWF0b3IgaW1wbGVtZW50cyBPY2xFeHByZXNzaW9uRXZhbHVhdG9yIHsN CiANCi0gICAgLyoqDQotICAgICAqIExvZ2dlci4NCi0gICAgICovDQotICAgIHByaXZhdGUgc3Rh dGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dnZXINCi0gICAgICAgICAgICAuZ2V0TG9nZ2VyKERl ZmF1bHRPY2xFdmFsdWF0b3IuY2xhc3MpOw0KLSAgICANCisgICAgLy8gLyoqDQorICAgIC8vICAq IExvZ2dlci4NCisgICAgLy8gICovDQorICAgIC8vIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dl ciBMT0cgPQ0KKyAgICAvLyAgICAgTG9nZ2VyLmdldExvZ2dlcihEZWZhdWx0T2NsRXZhbHVhdG9y LmNsYXNzLmdldE5hbWUoKSk7DQorDQogICAgIHByaXZhdGUgc3RhdGljIE9jbEV4cHJlc3Npb25F dmFsdWF0b3IgaW5zdGFuY2UgPSBudWxsOw0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIEBy ZXR1cm4gdW5pcXVlIGluc3RhbmNlDQogICAgICAqLw0KQEAgLTcyLDE2ICs3MSwxNiBAQA0KICAg ICAgICAgfQ0KICAgICAgICAgcmV0dXJuIGluc3RhbmNlOw0KICAgICB9DQotICAgIA0KKw0KICAg ICAvKg0KICAgICAgKiBAc2VlIG9yZy5hcmdvdW1sLnByb2ZpbGUuaW50ZXJuYWwub2NsLk9jbEV4 cHJlc3Npb25FdmFsdWF0b3IjZXZhbHVhdGUoamF2YS51dGlsLkhhc2hNYXAsIG9yZy5hcmdvdW1s LnByb2ZpbGUuaW50ZXJuYWwub2NsLk1vZGVsSW50ZXJwcmV0ZXIsIGphdmEubGFuZy5TdHJpbmcp DQogICAgICAqLw0KICAgICBwdWJsaWMgT2JqZWN0IGV2YWx1YXRlKE1hcDxTdHJpbmcsIE9iamVj dD4gdnQsIE1vZGVsSW50ZXJwcmV0ZXIgbWksDQogICAgICAgICAgICAgU3RyaW5nIG9jbCkgdGhy b3dzIEludmFsaWRPY2xFeGNlcHRpb24gew0KLSAgICAgICAgLy8gWFhYIHRoaXMgc2VlbXMgdG8g YmUgYSBidWcgb2YgdGhlIHBhcnNlciwgDQorICAgICAgICAvLyBYWFggdGhpcyBzZWVtcyB0byBi ZSBhIGJ1ZyBvZiB0aGUgcGFyc2VyLA0KICAgICAgICAgLy8gaXQgYWx3YXlzIHJlcXVpcmVzIGEg Y29udGV4dA0KLSAgICAgICAgDQotICAgICAgICAvL0xPRy5kZWJ1ZygiT0NMOiAiICsgb2NsKTsN CisNCisgICAgICAgIC8vTE9HLmxvZyhMZXZlbC5GSU5FLCAiT0NMOiAiICsgb2NsKTsNCiAgICAg ICAgIGlmIChvY2wuY29udGFpbnMoIm9yZSIpKSB7DQogICAgICAgICAgICAgLy8gVE9ETzogQ29u dmVydCB0aGlzIHRvIHNvbWUgc2Vuc2libGUgbG9nZ2luZw0KICAgICAgICAgICAgIFN5c3RlbS5v dXQucHJpbnRsbigiVk9JTEEhIik7DQpAQCAtOTAsMTMgKzg5LDEzIEBADQogICAgICAgICAgICAg ICAgICJjb250ZXh0IFggaW52OiAiICsgb2NsKSwgMikpOw0KICAgICAgICAgT2NsUGFyc2VyIHBh cnNlciA9IG5ldyBPY2xQYXJzZXIobGV4ZXIpOw0KICAgICAgICAgU3RhcnQgdHJlZSA9IG51bGw7 DQotICAgICAgICANCisNCiAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgdHJlZSA9IHBhcnNl ci5wYXJzZSgpOw0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCiAgICAgICAgICAg ICB0aHJvdyBuZXcgSW52YWxpZE9jbEV4Y2VwdGlvbihvY2wpOw0KICAgICAgICAgfQ0KLSAgICAg ICAgDQorDQogICAgICAgICBFdmFsdWF0ZUV4cHJlc3Npb24gZWUgPSBuZXcgRXZhbHVhdGVFeHBy ZXNzaW9uKHZ0LCBtaSk7DQogICAgICAgICB0cmVlLmFwcGx5KGVlKTsNCiAgICAgICAgIHJldHVy biBlZS5nZXRWYWx1ZSgpOw0KDQpNb2RpZmllZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9v cmcvYXJnb3VtbC9wcm9maWxlL2ludGVybmFsL29jbC9FdmFsdWF0ZUV4cHJlc3Npb24uamF2YQ0K VXJsOiBodHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVu ay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUvaW50ZXJuYWwvb2NsL0V2 YWx1YXRlRXhwcmVzc2lvbi5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIy PTE5OTA3DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAv c3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUvaW50ZXJuYWwvb2NsL0V2YWx1YXRlRXhwcmVzc2lvbi5q YXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1s L3Byb2ZpbGUvaW50ZXJuYWwvb2NsL0V2YWx1YXRlRXhwcmVzc2lvbi5qYXZhCTIwMTItMTItMzAg MDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQogLyogJElkJA0KICAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cN CisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAg KiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcg bWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg RWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBk aXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCkBAIC00NCw4ICs0NCw5IEBADQogaW1w b3J0IGphdmEudXRpbC5IYXNoU2V0Ow0KIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCiBpbXBvcnQg amF2YS51dGlsLk1hcDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0 IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5M b2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLnByb2ZpbGUuaW50ZXJuYWwub2NsLnVtbDE0LkJh ZzsNCiBpbXBvcnQgb3JnLmFyZ291bWwucHJvZmlsZS5pbnRlcm5hbC5vY2wudW1sMTQuSGFzaEJh ZzsNCiBpbXBvcnQgb3JnLmFyZ291bWwucHJvZmlsZS5pbnRlcm5hbC5vY2wudW1sMTQuT2NsRW51 bUxpdGVyYWw7DQpAQCAtMTAwLDcgKzEwMSw3IEBADQogICogRXZhbHVhdGVzIE9DTCBleHByZXNz aW9ucywgdGhpcyBjbGFzcyBzaG91bGQgbm90IGRlcGVuZCBvbiB0aGUgbW9kZWwNCiAgKiBzdWJz eXN0ZW0uIFRoaXMgYWRhcHRlciBhc3N1bWVzIHRoZSBvY2wgZXhwcmVzc2lvbiBpcyBzeW50YXRp Y2FsbHkgYW5kDQogICogc2VtYW50aWNhbGx5IGNvcnJlY3QuDQotICogDQorICoNCiAgKiBAYXV0 aG9yIG1hdXJlbGlvMTIzNA0KICAqLw0KIHB1YmxpYyBjbGFzcyBFdmFsdWF0ZUV4cHJlc3Npb24g ZXh0ZW5kcyBEZXB0aEZpcnN0QWRhcHRlciB7DQpAQCAtMTA4LDggKzEwOSw4IEBADQogICAgIC8q Kg0KICAgICAgKiBMb2dnZXIuDQogICAgICAqLw0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBM b2dnZXIgTE9HID0gTG9nZ2VyDQotICAgICAgICAgICAgLmdldExvZ2dlcihFdmFsdWF0ZUV4cHJl c3Npb24uY2xhc3MpOw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCisg ICAgICAgIExvZ2dlci5nZXRMb2dnZXIoRXZhbHVhdGVFeHByZXNzaW9uLmNsYXNzLmdldE5hbWUo KSk7DQogDQogICAgIC8qKg0KICAgICAgKiBUaGUgVmFyaWFibGUgVGFibGUNCkBAIC0xMzAsMTAg KzEzMSwxMCBAQA0KICAgICAgKiBUaGUgbW9kZWwgaW50ZXJwcmV0ZXINCiAgICAgICovDQogICAg IHByaXZhdGUgTW9kZWxJbnRlcnByZXRlciBpbnRlcnAgPSBudWxsOw0KLSAgICANCisNCiAgICAg LyoqDQogICAgICAqIENvbnN0cnVjdG9yDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAcGFy YW0gbW9kZWxFbGVtZW50IHNlbGYNCiAgICAgICogQHBhcmFtIG1pIG1vZGVsIGludGVycHJldGVy DQogICAgICAqLw0KQEAgLTE0MywyMiArMTQ0LDIyIEBADQogDQogICAgIC8qKg0KICAgICAgKiBD b25zdHJ1Y3Rvcg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIHZhcmlhYmxlVGFi bGUgdGhlIHZhcmlhYmxlIHRhYmxlDQogICAgICAqIEBwYXJhbSBtb2RlbEludGVycHJldGVyIG1v ZGVsIGludGVycHJldGVyDQogICAgICAqLw0KLSAgICBwdWJsaWMgRXZhbHVhdGVFeHByZXNzaW9u KE1hcDxTdHJpbmcsIE9iamVjdD4gdmFyaWFibGVUYWJsZSwgDQorICAgIHB1YmxpYyBFdmFsdWF0 ZUV4cHJlc3Npb24oTWFwPFN0cmluZywgT2JqZWN0PiB2YXJpYWJsZVRhYmxlLA0KICAgICAgICAg ICAgIE1vZGVsSW50ZXJwcmV0ZXIgbW9kZWxJbnRlcnByZXRlcikgew0KICAgICAgICAgcmVzZXQo dmFyaWFibGVUYWJsZSwgbW9kZWxJbnRlcnByZXRlcik7DQogICAgIH0NCi0gICAgDQorDQogICAg IC8qKg0KICAgICAgKiBSZXNldHMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoaXMgYWRhcHRlcg0K LSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIG1pIHRoZSBtb2RlbCBpbnRlcnByZXRl cg0KICAgICAgKiBAcGFyYW0gZWxlbWVudCB0aGUgbW9kZWwgZWxlbWVudA0KICAgICAgKi8NCi0g ICAgcHVibGljIHZvaWQgcmVzZXQoT2JqZWN0IGVsZW1lbnQsIE1vZGVsSW50ZXJwcmV0ZXIgbWkp IHsgICAgICAgIA0KKyAgICBwdWJsaWMgdm9pZCByZXNldChPYmplY3QgZWxlbWVudCwgTW9kZWxJ bnRlcnByZXRlciBtaSkgew0KICAgICAgICAgdnQgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE9iamVj dD4oKTsNCiAgICAgICAgIHZ0LnB1dCgic2VsZiIsIGVsZW1lbnQpOw0KICAgICAgICAgcmVzZXQo dnQsIG1pKTsNCkBAIC0xODIsNyArMTgzLDcgQEANCiAgICAgcHVibGljIE9iamVjdCBnZXRWYWx1 ZSgpIHsNCiAgICAgICAgIHJldHVybiB2YWw7DQogICAgIH0NCi0gICAgDQorDQogICAgIC8qKiBJ bnRlcnByZXRlciBDb2RlICogKi8NCiANCiAgICAgLyoNCkBAIC0zMTgsNyArMzE5LDcgQEANCiAg ICAgICAgICAgICAgICAgZXJyb3Iobm9kZSk7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgfSBl bHNlIHsNCi0gICAgICAgICAgICAvLyBpZiBvbmUgc2lkZSBpcyBudWxsLCBjb21wYXJlIHdpdGgg dGhlIGVxdWFsaXR5IG9wZXJhdG9yIA0KKyAgICAgICAgICAgIC8vIGlmIG9uZSBzaWRlIGlzIG51 bGwsIGNvbXBhcmUgd2l0aCB0aGUgZXF1YWxpdHkgb3BlcmF0b3INCiAgICAgICAgICAgICBpZiAo b3AgaW5zdGFuY2VvZiBBRXF1YWxSZWxhdGlvbmFsT3BlcmF0b3IpIHsNCiAgICAgICAgICAgICAg ICAgdmFsID0gKGxlZnQgPT0gcmlnaHQpOw0KICAgICAgICAgICAgIH0gZWxzZSBpZiAob3AgaW5z dGFuY2VvZiBBTkVxdWFsUmVsYXRpb25hbE9wZXJhdG9yKSB7DQpAQCAtNTMxLDEzICs1MzIsMTMg QEANCiAgICAgICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgICAgICAgcHVibGlj IE9iamVjdCBldmFsdWF0ZShNYXA8U3RyaW5nLCBPYmplY3Q+IHZ0aSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT2JqZWN0IGV4cGkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAN CisNCiAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qgc3RhdGUgPSBFdmFsdWF0ZUV4cHJl c3Npb24udGhpcy5zYXZlU3RhdGUoKTsNCiANCiAgICAgICAgICAgICAgICAgICAgICAgICBFdmFs dWF0ZUV4cHJlc3Npb24udGhpcy52dCA9IHZ0aTsNCiAgICAgICAgICAgICAgICAgICAgICAgICBF dmFsdWF0ZUV4cHJlc3Npb24udGhpcy52YWwgPSBudWxsOw0KICAgICAgICAgICAgICAgICAgICAg ICAgIEV2YWx1YXRlRXhwcmVzc2lvbi50aGlzLmZ3ZCA9IG51bGw7DQotICAgICAgICAgICAgICAg ICAgICAgICAgDQorDQogICAgICAgICAgICAgICAgICAgICAgICAgKChQRXhwcmVzc2lvbikgZXhw aSkuYXBwbHkoRXZhbHVhdGVFeHByZXNzaW9uLnRoaXMpOw0KIA0KICAgICAgICAgICAgICAgICAg ICAgICAgIE9iamVjdCByZXRpID0gRXZhbHVhdGVFeHByZXNzaW9uLnRoaXMudmFsOw0KQEAgLTU1 OCw3ICs1NTksNyBAQA0KICAgICAgICAgfQ0KICAgICAgICAgb3V0QUZlYXR1cmVDYWxsUGFyYW1l dGVycyhub2RlKTsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgQFN1cHByZXNzV2FybmluZ3MoInVu Y2hlY2tlZCIpDQogICAgIHByaXZhdGUgdm9pZCBsb2FkU3RhdGUoT2JqZWN0IHN0YXRlKSB7DQog ICAgICAgICBPYmplY3RbXSBzdGF0ZUFyciA9IChPYmplY3RbXSkgc3RhdGU7DQpAQCAtNjU3LDcg KzY1OCw3IEBADQogICAgICAqLw0KICAgICBwdWJsaWMgdm9pZCBvdXRBU3RyaW5nTGl0ZXJhbChB U3RyaW5nTGl0ZXJhbCBub2RlKSB7DQogICAgICAgICBTdHJpbmcgdGV4dCA9IG5vZGUuZ2V0U3Ry aW5nTGl0KCkuZ2V0VGV4dCgpOw0KLSAgICAgICAgdmFsID0gdGV4dC5zdWJzdHJpbmcoMSwgdGV4 dC5sZW5ndGgoKSAtIDEpOyANCisgICAgICAgIHZhbCA9IHRleHQuc3Vic3RyaW5nKDEsIHRleHQu bGVuZ3RoKCkgLSAxKTsNCiAgICAgICAgIGRlZmF1bHRPdXQobm9kZSk7DQogICAgIH0NCiANCkBA IC02OTMsNyArNjk0LDcgQEANCiAgICAgICAgIHZhbCA9IG5ldyBPY2xFbnVtTGl0ZXJhbChub2Rl LmdldE5hbWUoKS50b1N0cmluZygpLnRyaW0oKSk7DQogICAgICAgICBkZWZhdWx0T3V0KG5vZGUp Ow0KICAgICB9DQotICAgIA0KKw0KICAgICAvKg0KICAgICAgKiBAc2VlIHR1ZHJlc2Rlbi5vY2wu cGFyc2VyLmFuYWx5c2lzLkRlcHRoRmlyc3RBZGFwdGVyI2Nhc2VBTGl0ZXJhbENvbGxlY3Rpb24o dHVkcmVzZGVuLm9jbC5wYXJzZXIubm9kZS5BTGl0ZXJhbENvbGxlY3Rpb24pDQogICAgICAqLw0K QEAgLTcwMSwyMSArNzAyLDIxIEBADQogICAgIHB1YmxpYyB2b2lkIGNhc2VBTGl0ZXJhbENvbGxl Y3Rpb24oQUxpdGVyYWxDb2xsZWN0aW9uIG5vZGUpDQogICAgIHsNCiAgICAgICAgIENvbGxlY3Rp b248T2JqZWN0PiBjb2wgPSBudWxsOw0KLSAgICAgICAgDQorDQogICAgICAgICBpbkFMaXRlcmFs Q29sbGVjdGlvbihub2RlKTsNCiAgICAgICAgIGlmIChub2RlLmdldENvbGxlY3Rpb25LaW5kKCkg IT0gbnVsbCkNCiAgICAgICAgIHsNCiAgICAgICAgICAgICBub2RlLmdldENvbGxlY3Rpb25LaW5k KCkuYXBwbHkodGhpcyk7DQotICAgICAgICAgICAgDQorDQogICAgICAgICAgICAgU3RyaW5nIGtp bmQgPSBub2RlLmdldENvbGxlY3Rpb25LaW5kKCkudG9TdHJpbmcoKS50cmltKCk7DQogICAgICAg ICAgICAgaWYgKGtpbmQuZXF1YWxzSWdub3JlQ2FzZSgiU2V0IikpIHsNCiAgICAgICAgICAgICAg ICAgY29sID0gbmV3IEhhc2hTZXQ8T2JqZWN0PigpOw0KICAgICAgICAgICAgIH0gZWxzZSBpZiAo a2luZC5lcXVhbHNJZ25vcmVDYXNlKCJTZXF1ZW5jZSIpKSB7DQogICAgICAgICAgICAgICAgIGNv bCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOw0KICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2lu ZC5lcXVhbHNJZ25vcmVDYXNlKCJCYWciKSkgew0KLSAgICAgICAgICAgICAgICBjb2wgPSBuZXcg SGFzaEJhZzxPYmplY3Q+KCk7ICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICBjb2wg PSBuZXcgSGFzaEJhZzxPYmplY3Q+KCk7DQogICAgICAgICAgICAgfQ0KLSAgICAgICAgfSAgICAg ICAgDQorICAgICAgICB9DQogICAgICAgICBpZiAobm9kZS5nZXRMQnJhY2UoKSAhPSBudWxsKSB7 DQogICAgICAgICAgICAgbm9kZS5nZXRMQnJhY2UoKS5hcHBseSh0aGlzKTsNCiAgICAgICAgIH0N CkBAIC03NzQsNyArNzc1LDcgQEANCiAgICAgICAgIH0NCiAgICAgICAgIG91dEFMaXN0RXhwcmVz c2lvbkxpc3RPclJhbmdlVGFpbChub2RlKTsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgLyoNCiAg ICAgICogQHNlZSB0dWRyZXNkZW4ub2NsLnBhcnNlci5hbmFseXNpcy5EZXB0aEZpcnN0QWRhcHRl ciNjYXNlQUZlYXR1cmVDYWxsKHR1ZHJlc2Rlbi5vY2wucGFyc2VyLm5vZGUuQUZlYXR1cmVDYWxs KQ0KICAgICAgKi8NCkBAIC04NTcsNyArODU4LDcgQEANCiANCiAgICAgcHJpdmF0ZSBPYmplY3Qg cnVuRmVhdHVyZUNhbGwoT2JqZWN0IHN1YmplY3QsIE9iamVjdCBmZWF0dXJlLCBPYmplY3QgdHlw ZSwNCiAgICAgICAgICAgICBMaXN0IHBhcmFtZXRlcnMpIHsNCi0gICAgICAgIC8vIExPRy5kZWJ1 ZygiT0NMIEZFQVRVUkUgQ0FMTDogIiArIHN1YmplY3QgKyAiIisgdHlwZSArIiIrIGZlYXR1cmUg KyAiIg0KKyAgICAgICAgLy8gTE9HLmxvZyhMZXZlbC5GSU5FLCAiT0NMIEZFQVRVUkUgQ0FMTDog IiArIHN1YmplY3QgKyAiIisgdHlwZSArIiIrIGZlYXR1cmUgKyAiIg0KICAgICAgICAgLy8gKyBw YXJhbWV0ZXJzKTsNCiANCiAgICAgICAgIGlmIChwYXJhbWV0ZXJzID09IG51bGwpIHsNCkBAIC04 NjYsNyArODY3LDcgQEANCiANCiAgICAgICAgIC8vIFhYWCB0aGlzIHNob3VsZCBiZSBkb25lIGlu IENvbGxlY3Rpb25zTW9kZWxJbnRlcnByZXRlcg0KICAgICAgICAgLy8gYnV0IGl0IGNhbid0IHRy aWdnZXIgYW5vdGhlciBpbnZva2VGZWF0dXJlLi4uDQotICAgICAgICANCisNCiAgICAgICAgIGlm ICgoc3ViamVjdCBpbnN0YW5jZW9mIENvbGxlY3Rpb24pDQogICAgICAgICAgICAgICAgICYmIHR5 cGUudG9TdHJpbmcoKS50cmltKCkuZXF1YWxzKCIuIikpIHsNCiAgICAgICAgICAgICBDb2xsZWN0 aW9uIGNvbCA9IChDb2xsZWN0aW9uKSBzdWJqZWN0Ow0KQEAgLTg4NCw3ICs4ODUsOCBAQA0KIA0K ICAgICAvKiogRXJyb3IgSGFuZGxpbmcgKiAqLw0KICAgICBwcml2YXRlIHZvaWQgZXJyb3JOb3RU eXBlKE9iamVjdCBub2RlLCBTdHJpbmcgdHlwZSwgT2JqZWN0IGRmdCkgew0KLSAgICAgICAgTE9H LmVycm9yKCJPQ0wgZG9lcyBub3QgZXZhbHVhdGUgdG8gYSAiICsgdHlwZSArICIgZXhwcmVzc2lv biEhIEV4cDogIg0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsDQorICAgICAgICAgICAg ICAgICJPQ0wgZG9lcyBub3QgZXZhbHVhdGUgdG8gYSAiICsgdHlwZSArICIgZXhwcmVzc2lvbiEh IEV4cDogIg0KICAgICAgICAgICAgICAgICArIG5vZGUgKyAiIFZhbDogIiArIHZhbCk7DQogICAg ICAgICB2YWwgPSBkZnQ7DQogICAgICAgICAvLyBUT0RPOiBXZSBuZWVkIGEgc3BlY2lmaWMgZXhj ZXB0aW9uIHR5cGUgaGVyZS4NCkBAIC04OTIsNyArODk0LDggQEANCiAgICAgfQ0KIA0KICAgICBw cml2YXRlIHZvaWQgZXJyb3IoT2JqZWN0IG5vZGUpIHsNCi0gICAgICAgIExPRy5lcnJvcigiVW5r bm93biBlcnJvciBwcm9jZXNzaW5nIE9DTCBleHAhISBFeHA6ICIgKyBub2RlICsgIiBWYWw6ICIN CisgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLA0KKyAgICAgICAgICAgICAgICAiVW5rbm93 biBlcnJvciBwcm9jZXNzaW5nIE9DTCBleHAhISBFeHA6ICIgKyBub2RlICsgIiBWYWw6ICINCiAg ICAgICAgICAgICAgICAgKyB2YWwpOw0KICAgICAgICAgdmFsID0gbnVsbDsNCiAgICAgICAgIC8v IFRPRE86IFdlIG5lZWQgYSBzcGVjaWZpYyBleGNlcHRpb24gdHlwZSBoZXJlLg0KDQpNb2RpZmll ZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC9wcm9maWxlL2ludGVybmFs L29jbC91bWwxNC9Nb2RlbEFjY2Vzc01vZGVsSW50ZXJwcmV0ZXIuamF2YQ0KVXJsOiBodHRwOi8v YXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9zcmMvYXJnb3Vt bC1hcHAvc3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUvaW50ZXJuYWwvb2NsL3VtbDE0L01vZGVsQWNj ZXNzTW9kZWxJbnRlcnByZXRlci5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2 JnIyPTE5OTA3DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1h cHAvc3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUvaW50ZXJuYWwvb2NsL3VtbDE0L01vZGVsQWNjZXNz TW9kZWxJbnRlcnByZXRlci5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1h cHAvc3JjL29yZy9hcmdvdW1sL3Byb2ZpbGUvaW50ZXJuYWwvb2NsL3VtbDE0L01vZGVsQWNjZXNz TW9kZWxJbnRlcnByZXRlci5qYXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiAr MSw2IEBADQogLyogJElkJA0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAo YykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkt MjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBU aGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUg YXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2 MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFp bGFibGUgYXQNCkBAIC00MiwxNiArNDIsMTcgQEANCiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rp b247DQogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0Ow0KIGltcG9ydCBqYXZhLnV0aWwuTWFwOw0K K2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dp bmcuTG9nZ2VyOw0KIA0KLWltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsNCiBpbXBvcnQg b3JnLmFyZ291bWwubW9kZWwuTW9kZWw7DQogaW1wb3J0IG9yZy5hcmdvdW1sLnByb2ZpbGUuaW50 ZXJuYWwub2NsLkRlZmF1bHRPY2xFdmFsdWF0b3I7DQogaW1wb3J0IG9yZy5hcmdvdW1sLnByb2Zp bGUuaW50ZXJuYWwub2NsLkludmFsaWRPY2xFeGNlcHRpb247DQogaW1wb3J0IG9yZy5hcmdvdW1s LnByb2ZpbGUuaW50ZXJuYWwub2NsLk1vZGVsSW50ZXJwcmV0ZXI7DQogDQogLyoqDQotICogTW9k ZWwgQWNjZXNzDQotICogDQorICogTW9kZWwgQWNjZXNzLg0KKyAqDQogICogQGF1dGhvciBtYXVy ZWxpbzEyMzQNCiAgKi8NCiBwdWJsaWMgY2xhc3MgTW9kZWxBY2Nlc3NNb2RlbEludGVycHJldGVy IGltcGxlbWVudHMgTW9kZWxJbnRlcnByZXRlciB7DQpAQCAtNTksMTEgKzYwLDExIEBADQogICAg IC8qKg0KICAgICAgKiBMb2dnZXIuDQogICAgICAqLw0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5h bCBMb2dnZXIgTE9HID0gTG9nZ2VyDQotICAgICAgICAgICAgLmdldExvZ2dlcihNb2RlbEFjY2Vz c01vZGVsSW50ZXJwcmV0ZXIuY2xhc3MpOw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dn ZXIgTE9HID0NCisgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoTW9kZWxBY2Nlc3NNb2RlbEludGVy cHJldGVyLmNsYXNzLmdldE5hbWUoKSk7DQogDQogICAgIHByaXZhdGUgc3RhdGljIFVtbDE0TW9k ZWxJbnRlcnByZXRlciB1bWwxNG1pID0gbmV3IFVtbDE0TW9kZWxJbnRlcnByZXRlcigpOw0KLSAg ICANCisNCiAgICAgLyoNCiAgICAgICogQHNlZSBvcmcuYXJnb3VtbC5wcm9maWxlLmludGVybmFs Lm9jbC5Nb2RlbEludGVycHJldGVyI2ludm9rZUZlYXR1cmUoamF2YS51dGlsLk1hcCwNCiAgICAg ICogICAgICBqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3Ry aW5nLA0KQEAgLTc0LDMzICs3NSwzMyBAQA0KICAgICAgICAgICAgIFN0cmluZyBmZWF0dXJlLCBT dHJpbmcgdHlwZSwgT2JqZWN0W10gcGFyYW1ldGVycykgew0KIA0KICAgICAgICAgLy8gVE9ETzog VGhpcyBpcyBhbiBhYnN1cmRseSBsb25nIG1ldGhvZCEgQnJlYWsgaXQgdXAuDQotICAgICAgICAN CisNCiAgICAgICAgIGlmIChzdWJqZWN0ID09IG51bGwpIHsNCiAgICAgICAgICAgICBzdWJqZWN0 ID0gdnQuZ2V0KCJzZWxmIik7DQogICAgICAgICB9DQotICAgICAgICANCi0gICAgICAgIC8qIDQu NS4yLjEgQWJzdHJhY3Rpb24gKi8gIA0KKw0KKyAgICAgICAgLyogNC41LjIuMSBBYnN0cmFjdGlv biAqLw0KICAgICAgICAgLy8gVE9ETyBpbnZlc3RpZ2F0ZTogQWJzdHJhY3Rpb24ubWFwcGluZyBp cyBub3QgaW4gdGhlIE1vZGVsIFN1YnN5c3RlbQ0KIA0KLSAgICAgICAgLyogNC41LjIuMyBBc3Nv Y2lhdGlvbiAqLyAgDQotICAgICAgICANCisgICAgICAgIC8qIDQuNS4yLjMgQXNzb2NpYXRpb24g Ki8NCisNCiAgICAgICAgIGlmIChNb2RlbC5nZXRGYWNhZGUoKS5pc0FBc3NvY2lhdGlvbihzdWJq ZWN0KSkgew0KICAgICAgICAgICAgIGlmICh0eXBlLmVxdWFscygiLiIpKSB7DQogICAgICAgICAg ICAgICAgIGlmIChmZWF0dXJlLmVxdWFscygiY29ubmVjdGlvbiIpKSB7DQogICAgICAgICAgICAg ICAgICAgICByZXR1cm4gbmV3IEFycmF5TGlzdDxPYmplY3Q+KE1vZGVsLmdldEZhY2FkZSgpDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRDb25uZWN0aW9ucyhzdWJqZWN0KSk7DQog ICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgDQorDQogICAgICAgICAgICAgICAg IC8vIEFkZGl0aW9uYWwgT3BlcmF0aW9uIDQuNS4zLjEgWzFdDQogICAgICAgICAgICAgICAgIGlm IChmZWF0dXJlLmVxdWFscygiYWxsQ29ubmVjdGlvbnMiKSkgew0KICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIG5ldyBIYXNoU2V0PE9iamVjdD4oTW9kZWwuZ2V0RmFjYWRlKCkNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLmdldENvbm5lY3Rpb25zKHN1YmplY3QpKTsNCi0gICAgICAg ICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KLSAgICAgICAgICAgIH0g ICAgICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAg fQ0KICAgICAgICAgfQ0KIA0KLSAgICAgICAgLyogNC41LjIuNSBBc3NvY2lhdGlvbkVuZCAqLyAg DQotICAgICAgICANCisgICAgICAgIC8qIDQuNS4yLjUgQXNzb2NpYXRpb25FbmQgKi8NCisNCiAg ICAgICAgIGlmIChNb2RlbC5nZXRGYWNhZGUoKS5pc0FBc3NvY2lhdGlvbkVuZChzdWJqZWN0KSkg ew0KICAgICAgICAgICAgIGlmICh0eXBlLmVxdWFscygiLiIpKSB7DQogICAgICAgICAgICAgICAg IGlmIChmZWF0dXJlLmVxdWFscygiYWdncmVnYXRpb24iKSkgew0KQEAgLTEzMCwyMyArMTMxLDIz IEBADQogICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgaWYgKGZlYXR1cmUuZXF1 YWxzKCJzcGVjaWZpY2F0aW9uIikpIHsNCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNb2Rl bC5nZXRGYWNhZGUoKS5nZXRTcGVjaWZpY2F0aW9uKHN1YmplY3QpOw0KLSAgICAgICAgICAgICAg ICB9ICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg IGlmIChmZWF0dXJlLmVxdWFscygicGFydGljaXBhbnQiKSkgew0KICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIE1vZGVsLmdldEZhY2FkZSgpLmdldENsYXNzaWZpZXIoc3ViamVjdCk7DQogICAg ICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgDQorDQogICAgICAgICAgICAgICAgIC8v IFRPRE8gaW52ZXN0aWdhdGUgdGhlICJ1bm5hbWVkIG9wcG9zaXRlIGVuZCINCi0gICAgICAgICAg ICAgICAgDQorDQogICAgICAgICAgICAgICAgIC8vIEFkZGl0aW9uYWwgT3BlcmF0aW9uIDQuNS4z LjMgWzFdDQogICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLmVxdWFscygidXBwZXJib3VuZCIp KSB7DQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTW9kZWwuZ2V0RmFjYWRlKCkuZ2V0VXBw ZXIoc3ViamVjdCk7DQogICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgDQorDQog ICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KIA0KLSAgICAgICAgLyogNC41LjIuNiBBdHRyaWJ1 dGUgKi8gIA0KLSAgICAgICAgDQorICAgICAgICAvKiA0LjUuMi42IEF0dHJpYnV0ZSAqLw0KKw0K ICAgICAgICAgaWYgKE1vZGVsLmdldEZhY2FkZSgpLmlzQUF0dHJpYnV0ZShzdWJqZWN0KSkgew0K ICAgICAgICAgICAgIGlmICh0eXBlLmVxdWFscygiLiIpKSB7DQogICAgICAgICAgICAgICAgIGlm IChmZWF0dXJlLmVxdWFscygiaW5pdGlhbFZhbHVlIikpIHsNCkBAIC0xNTksOCArMTYwLDggQEAN CiAgICAgICAgICAgICB9DQogICAgICAgICB9DQogDQotICAgICAgICAvKiA0LjUuMi43IEJlaGF2 aW9yYWxGZWF0dXJlICovICANCi0gICAgICAgIA0KKyAgICAgICAgLyogNC41LjIuNyBCZWhhdmlv cmFsRmVhdHVyZSAqLw0KKw0KICAgICAgICAgaWYgKE1vZGVsLmdldEZhY2FkZSgpLmlzQUJlaGF2 aW9yYWxGZWF0dXJlKHN1YmplY3QpKSB7DQogICAgICAgICAgICAgaWYgKHR5cGUuZXF1YWxzKCIu IikpIHsNCiAgICAgICAgICAgICAgICAgaWYgKGZlYXR1cmUuZXF1YWxzKCJpc1F1ZXJ5IikpIHsN CkBAIC0xNzEsMzIgKzE3MiwzMiBAQA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0 UGFyYW1ldGVycyhzdWJqZWN0KSk7DQogICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICB9 DQotICAgICAgICAgICAgDQorDQogICAgICAgICAgICAgLy8gVE9ETyBpbXBsZW1lbnQgYWRkaXRp b25hbCBvcGVyYXRpb25zIGluIDQuNS4zLjUNCiAgICAgICAgIH0NCiANCi0gICAgICAgIC8qIDQu NS4yLjggQmluZGluZyAqLyAgDQotICAgICAgICANCisgICAgICAgIC8qIDQuNS4yLjggQmluZGlu ZyAqLw0KKw0KICAgICAgICAgaWYgKE1vZGVsLmdldEZhY2FkZSgpLmlzQUJpbmRpbmcoc3ViamVj dCkpIHsNCiAgICAgICAgICAgICBpZiAodHlwZS5lcXVhbHMoIi4iKSkgew0KICAgICAgICAgICAg ICAgICBpZiAoZmVhdHVyZS5lcXVhbHMoImFyZ3VtZW50IikpIHsNCiAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBNb2RlbC5nZXRGYWNhZGUoKS5nZXRBcmd1bWVudHMoc3ViamVjdCk7DQogICAg ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICB9DQotICAgICAgICB9ICAgICAgICANCisgICAg ICAgIH0NCisNCisgICAgICAgIC8qIDQuNS4yLjkgQ2xhc3MgKi8NCiANCi0gICAgICAgIC8qIDQu NS4yLjkgQ2xhc3MgKi8gIA0KLSAgICAgICAgDQogICAgICAgICBpZiAoTW9kZWwuZ2V0RmFjYWRl KCkuaXNBQ2xhc3Moc3ViamVjdCkpIHsNCiAgICAgICAgICAgICBpZiAodHlwZS5lcXVhbHMoIi4i KSkgew0KICAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZS5lcXVhbHMoImlzQWN0aXZlIikpIHsN CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNb2RlbC5nZXRGYWNhZGUoKS5pc0FjdGl2ZShz dWJqZWN0KTsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCi0gICAgICAgIH0g ICAgICAgIA0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLyogNC41LjIuMTAgQ2xhc3NpZmllciAq Lw0KIA0KLSAgICAgICAgLyogNC41LjIuMTAgQ2xhc3NpZmllciAqLyAgDQotICAgICAgICANCiAg ICAgICAgIGlmIChNb2RlbC5nZXRGYWNhZGUoKS5pc0FDbGFzc2lmaWVyKHN1YmplY3QpKSB7DQog ICAgICAgICAgICAgaWYgKHR5cGUuZXF1YWxzKCIuIikpIHsNCiAgICAgICAgICAgICAgICAgaWYg KGZlYXR1cmUuZXF1YWxzKCJmZWF0dXJlIikpIHsNCkBAIC0yMTAsNyArMjExLDcgQEANCiAgICAg ICAgICAgICAgICAgaWYgKGZlYXR1cmUuZXF1YWxzKCJhc3NvY2lhdGlvbiIpKSB7DQogICAgICAg ICAgICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5TGlzdDxPYmplY3Q+KE1vZGVsLmdldEZhY2Fk ZSgpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0QXNzb2NpYXRpb25FbmRzKHN1Ympl Y3QpKTsNCi0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAg ICAgfQ0KICAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZS5lcXVhbHMoInBvd2VydHlwZVJhbmdl IikpIHsNCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSGFzaFNldDxPYmplY3Q+KE1v ZGVsLmdldEZhY2FkZSgpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRQb3dlcnR5 cGVSYW5nZXMoc3ViamVjdCkpOw0KQEAgLTIyMCw3ICsyMjEsNyBAQA0KICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8T2JqZWN0PihNb2RlbC5nZXRGYWNhZGUoKQ0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RmVhdHVyZXMoc3ViamVjdCkpOw0KICAgICAg ICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIA0KKw0KICAgICAgICAgICAgICAgICAvLyBB ZGRpdGlvbmFsIE9wZXJhdGlvbnMgaW4gNC41LjMuOA0KICAgICAgICAgICAgICAgICBpZiAoZmVh dHVyZS5lcXVhbHMoImFsbEZlYXR1cmVzIikpIHsNCiAgICAgICAgICAgICAgICAgICAgIHJldHVy biBpbnRlcm5hbE9jbChzdWJqZWN0LCB2dCwgInNlbGYuZmVhdHVyZS0+dW5pb24oIg0KQEAgLTIz NiwxNyArMjM3LDE3IEBADQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxPY2wo c3ViamVjdCwgdnQsICJzZWxmLmFsbEZlYXR1cmVzLT4iDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICsgInNlbGVjdChmIHwgZi5vY2xJc0tpbmRPZihNZXRob2QpKSIpOw0KICAgICAgICAg ICAgICAgICB9DQotICAgICAgICAgICAgICAgIA0KKw0KICAgICAgICAgICAgICAgICBpZiAoZmVh dHVyZS5lcXVhbHMoImFsbEF0dHJpYnV0ZXMiKSkgew0KICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIGludGVybmFsT2NsKHN1YmplY3QsIHZ0LCAic2VsZi5hbGxGZWF0dXJlcy0+Ig0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICArICJzZWxlY3QoZiB8IGYub2NsSXNLaW5kT2YoQXR0cmli dXRlKSkiKTsNCiAgICAgICAgICAgICAgICAgfQ0KIA0KICAgICAgICAgICAgICAgICBpZiAoZmVh dHVyZS5lcXVhbHMoImFzc29jaWF0aW9ucyIpKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1 cm4gaW50ZXJuYWxPY2woc3ViamVjdCwgdnQsIA0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu IGludGVybmFsT2NsKHN1YmplY3QsIHZ0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi c2VsZi5hc3NvY2lhdGlvbi5hc3NvY2lhdGlvbi0+YXNTZXQoKSIpOw0KICAgICAgICAgICAgICAg ICB9DQotICAgICAgICAgICAgICAgIA0KKw0KICAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZS5l cXVhbHMoImFsbEFzc29jaWF0aW9ucyIpKSB7DQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g aW50ZXJuYWxPY2woDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QsDQpAQCAt MjU0LDcgKzI1NSw3IEBADQogICAgICAgICAgICAgICAgICAgICAgICAgICAic2VsZi5hc3NvY2lh dGlvbnMtPnVuaW9uKCINCiAgICAgICAgICAgICAgICAgICAgICAgICArICJzZWxmLnBhcmVudC5v Y2xBc1R5cGUoQ2xhc3NpZmllcikuYWxsQXNzb2NpYXRpb25zKSIpOw0KICAgICAgICAgICAgICAg ICB9DQotICAgICAgICAgICAgICAgIA0KKw0KICAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZS5l cXVhbHMoIm9wcG9zaXRlQXNzb2NpYXRpb25FbmRzIikpIHsNCiAgICAgICAgICAgICAgICAgICAg IHJldHVybiBpbnRlcm5hbE9jbChzdWJqZWN0LCB2dCwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAic2VsZi5hc3NvY2lhdGlvbnMtPnNlbGVjdCAoIGEgfCBhLmNvbm5lY3Rpb24tPnNlbGVjdCAi DQpAQCAtMjczLDcgKzI3NCw3IEBADQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VsZi5vcHBvc2l0ZUFzc29jaWF0aW9uRW5k cy0+Ig0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAidW5pb24oc2VsZi5wYXJlbnQuYWxs T3Bwb3NpdGVBc3NvY2lhdGlvbkVuZHMgKSIpOw0KLSAgICAgICAgICAgICAgICB9ICAgICAgICAg ICAgICAgICANCisgICAgICAgICAgICAgICAgfQ0KIA0KICAgICAgICAgICAgICAgICBpZiAoZmVh dHVyZS5lcXVhbHMoInNwZWNpZmljYXRpb24iKSkgew0KICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIGludGVybmFsT2NsKA0KQEAgLTI4NSw3ICsyODYsNyBAQA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICArICJhbmQgZC5zdGVyZW90eXBlLm5hbWUgPSBcInJlYWxpemF0aW9uXCIgIg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJhbmQgZC5zdXBwbGllci5vY2xJc0tpbmRP ZihDbGFzc2lmaWVyKSkiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIi5zdXBwbGll ci5vY2xBc1R5cGUoQ2xhc3NpZmllcikiKTsNCi0gICAgICAgICAgICAgICAgfSAgICAgICAgICAg ICAgICAgDQorICAgICAgICAgICAgICAgIH0NCiANCiAgICAgICAgICAgICAgICAgaWYgKGZlYXR1 cmUuZXF1YWxzKCJhbGxDb250ZW50cyIpKSB7DQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g aW50ZXJuYWxPY2woc3ViamVjdCwgdnQsDQpAQCAtMjkzLDcgKzI5NCw3IEBADQogICAgICAgICAg ICAgICAgICAgICAgICAgKyAic2VsZi5wYXJlbnQuYWxsQ29udGVudHMtPnNlbGVjdChlIHwiDQog ICAgICAgICAgICAgICAgICAgICAgICAgKyAiZS5lbGVtZW50T3duZXJzaGlwLnZpc2liaWxpdHkg PSAjcHVibGljIG9yIHRydWUgb3IgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBlLmVs ZW1lbnRPd25lcnNoaXAudmlzaWJpbGl0eSA9ICNwcm90ZWN0ZWQpKSIpOw0KLSAgICAgICAgICAg ICAgICB9ICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgfQ0KIA0KICAgICAgICAg ICAgICAgICBpZiAoZmVhdHVyZS5lcXVhbHMoImFsbERpc2NyaW1pbmF0b3JzIikpIHsNCiAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbE9jbChzdWJqZWN0LCB2dCwNCkBAIC0zMDQs OCArMzA1LDggQEANCiAgICAgICAgICAgICB9DQogICAgICAgICB9DQogDQotICAgICAgICAvKiA0 LjUuMi4xMSBDb21tZW50ICovICANCi0gICAgICAgIA0KKyAgICAgICAgLyogNC41LjIuMTEgQ29t bWVudCAqLw0KKw0KICAgICAgICAgaWYgKE1vZGVsLmdldEZhY2FkZSgpLmlzQUNvbW1lbnQoc3Vi amVjdCkpIHsNCiAgICAgICAgICAgICBpZiAodHlwZS5lcXVhbHMoIi4iKSkgew0KICAgICAgICAg ICAgICAgICBpZiAoZmVhdHVyZS5lcXVhbHMoImJvZHkiKSkgew0KQEAgLTMxNyw5ICszMTgsOSBA QA0KICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KLSAgICAg ICAgDQotICAgICAgICAvKiA0LjUuMi4xMiBDb21wb25lbnQgKi8gIA0KLSAgICAgICAgDQorDQor ICAgICAgICAvKiA0LjUuMi4xMiBDb21wb25lbnQgKi8NCisNCiAgICAgICAgIGlmIChNb2RlbC5n ZXRGYWNhZGUoKS5pc0FDb21wb25lbnQoc3ViamVjdCkpIHsNCiAgICAgICAgICAgICBpZiAodHlw ZS5lcXVhbHMoIi4iKSkgew0KICAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZS5lcXVhbHMoImRl cGxveW1lbnRMb2NhdGlvbiIpKSB7DQpAQCAtMzMxLDEwICszMzIsMTAgQEANCiAgICAgICAgICAg ICAgICAgICAgIHJldHVybiBuZXcgSGFzaFNldDxPYmplY3Q+KE1vZGVsLmdldEZhY2FkZSgpDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRSZXNpZGVudHMoc3ViamVjdCkpOw0KICAg ICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIA0KKw0KICAgICAgICAgICAgICAgICAv LyBUT0RPIGltcGxlbWVudGF0aW9uPw0KLSAgICAgICAgICAgICAgICANCi0gICAgICAgICAgICAg ICAgLy8gQWRkaXRpb25hbCBPcGVyYXRpb24gaW4gNC41LjMuOSAgICAgICAgICAgICAgICANCisN CisgICAgICAgICAgICAgICAgLy8gQWRkaXRpb25hbCBPcGVyYXRpb24gaW4gNC41LjMuOQ0KICAg ICAgICAgICAgICAgICBpZiAoZmVhdHVyZS5lcXVhbHMoImFsbFJlc2lkZW50RWxlbWVudHMiKSkg ew0KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsT2NsKHN1YmplY3QsIHZ0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgICJzZWxmLnJlc2lkZW50LT51bmlvbigiDQpAQCAtMzQ2 LDggKzM0Nyw4IEBADQogICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KIA0KLSAgICAgICAgLyog NC41LjIuMTMgQ29uc3RyYWludCAqLyAgDQotICAgICAgICANCisgICAgICAgIC8qIDQuNS4yLjEz IENvbnN0cmFpbnQgKi8NCisNCiAgICAgICAgIGlmIChNb2RlbC5nZXRGYWNhZGUoKS5pc0FDb25z dHJhaW50KHN1YmplY3QpKSB7DQogICAgICAgICAgICAgaWYgKHR5cGUuZXF1YWxzKCIuIikpIHsN CiAgICAgICAgICAgICAgICAgaWYgKGZlYXR1cmUuZXF1YWxzKCJib2R5IikpIHsNCkBAIC0zNTcs MTIgKzM1OCwxMiBAQA0KICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBjaGVjayB0aGlzDQog ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTW9kZWwuZ2V0RmFjYWRlKCkuZ2V0Q29uc3RyYWlu ZWRFbGVtZW50cyhzdWJqZWN0KTsNCiAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgDQorDQogICAgICAgICAgICAgfQ0KLSAgICAgICAgfSAgICAgICAg DQorICAgICAgICB9DQorDQorICAgICAgICAvKiA0LjUuMi4xNCBEZXBlbmRlbmN5ICovDQogDQot ICAgICAgICAvKiA0LjUuMi4xNCBEZXBlbmRlbmN5ICovICANCi0gICAgICAgIA0KICAgICAgICAg aWYgKE1vZGVsLmdldEZhY2FkZSgpLmlzQURlcGVuZGVuY3koc3ViamVjdCkpIHsNCiAgICAgICAg ICAgICBpZiAodHlwZS5lcXVhbHMoIi4iKSkgew0KICAgICAgICAgICAgICAgICBpZiAoZmVhdHVy ZS5lcXVhbHMoImNsaWVudCIpKSB7DQpAQCAtMzc0LDEyICszNzUsMTIgQEANCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLmdldFN1cHBsaWVycyhzdWJqZWN0KSk7DQogICAgICAgICAgICAg ICAgIH0NCiAgICAgICAgICAgICB9DQotICAgICAgICB9ICAgICAgICANCisgICAgICAgIH0NCiAN CiAgICAgICAgIC8vIFRPRE8gRWxlbWVudE93bmVyc2hpcCBpcyBub3QgaW4gTW9kZWxTdWJzeXMh IQ0KIA0KLSAgICAgICAgLyogNC41LjIuMTggRWxlbWVudE93bmVyc2hpcCAqLyAgICAgICAgICAN Ci0gICAgICAgIA0KKyAgICAgICAgLyogNC41LjIuMTggRWxlbWVudE93bmVyc2hpcCAqLw0KKw0K ICAgICAgICAgaWYgKE1vZGVsLmdldEZhY2FkZSgpLmlzQUVsZW1lbnRSZXNpZGVuY2Uoc3ViamVj dCkpIHsNCiAgICAgICAgICAgICBpZiAodHlwZS5lcXVhbHMoIi4iKSkgew0KICAgICAgICAgICAg ICAgICBpZiAoZmVhdHVyZS5lcXVhbHMoInZpc2liaWxpdHkiKSkgew0KQEAgLTM4OCw4ICszODks OCBAQA0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCiANCi0gICAgICAgIC8qIDQuNS4yLjE5 IEVudW1lcmF0aW9uICovICAgICAgICAgIA0KLSAgICAgICAgDQorICAgICAgICAvKiA0LjUuMi4x OSBFbnVtZXJhdGlvbiAqLw0KKw0KICAgICAgICAgaWYgKE1vZGVsLmdldEZhY2FkZSgpLmlzQUVu dW1lcmF0aW9uKHN1YmplY3QpKSB7DQogICAgICAgICAgICAgaWYgKHR5cGUuZXF1YWxzKCIuIikp IHsNCiAgICAgICAgICAgICAgICAgaWYgKGZlYXR1cmUuZXF1YWxzKCJsaXRlcmFsIikpIHsNCkBA IC0zOTgsOCArMzk5LDggQEANCiAgICAgICAgICAgICB9DQogICAgICAgICB9DQogDQotICAgICAg ICAvKiA0LjUuMi4yMCBFbnVtZXJhdGlvbkxpdGVyYWwgKi8gICAgICAgICAgDQotICAgICAgICAN CisgICAgICAgIC8qIDQuNS4yLjIwIEVudW1lcmF0aW9uTGl0ZXJhbCAqLw0KKw0KICAgICAgICAg aWYgKE1vZGVsLmdldEZhY2FkZSgpLmlzQUVudW1lcmF0aW9uTGl0ZXJhbChzdWJqZWN0KSkgew0K ICAgICAgICAgICAgIGlmICh0eXBlLmVxdWFscygiLiIpKSB7DQogICAgICAgICAgICAgICAgIGlm IChmZWF0dXJlLmVxdWFscygiZW51bWVyYXRpb24iKSkgew0KQEAgLTQwNyw5ICs0MDgsOSBAQA0K ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KLSAgICAgICAg DQotICAgICAgICAvKiA0LjUuMi4yMSBGZWF0dXJlICovICAgICAgICAgIA0KLSAgICAgICAgDQor DQorICAgICAgICAvKiA0LjUuMi4yMSBGZWF0dXJlICovDQorDQogICAgICAgICBpZiAoTW9kZWwu Z2V0RmFjYWRlKCkuaXNBRmVhdHVyZShzdWJqZWN0KSkgew0KICAgICAgICAgICAgIGlmICh0eXBl LmVxdWFscygiLiIpKSB7DQogICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLmVxdWFscygib3du ZXJTY29wZSIpKSB7DQpAQCAtNDIwLDEyICs0MjEsMTIgQEANCiAgICAgICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZS5lcXVhbHMoIm93bmVyIikpIHsNCiAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBNb2RlbC5nZXRGYWNhZGUoKS5nZXRPd25lcihzdWJqZWN0KTsN Ci0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgIH0NCi0gICAgICAgIH0gICAgICAgIA0KKyAgICAgICAgfQ0KKw0KKyAgICAg ICAgLyogNC41LjIuMjMgR2VuZXJhbGl6YWJsZSBFbGVtZW50ICovDQogDQotICAgICAgICAvKiA0 LjUuMi4yMyBHZW5lcmFsaXphYmxlIEVsZW1lbnQgKi8gICAgICAgICAgDQotICAgICAgICANCiAg ICAgICAgIGlmIChNb2RlbC5nZXRGYWNhZGUoKS5pc0FHZW5lcmFsaXphYmxlRWxlbWVudChzdWJq ZWN0KSkgew0KICAgICAgICAgICAgIGlmICh0eXBlLmVxdWFscygiLiIpKSB7DQogICAgICAgICAg ICAgICAgIGlmIChmZWF0dXJlLmVxdWFscygiaXNBYnN0cmFjdCIpKSB7DQpAQCAtNDQ2LDIyICs0 NDcsMjIgQEANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFNwZWNpYWxpemF0aW9u cyhzdWJqZWN0KSk7DQogICAgICAgICAgICAgICAgIH0NCiANCi0gICAgICAgICAgICAgICAgLy8g QWRkaXRpb25hbCBPcGVyYXRpb24gaW4gNC41LjMuMjAgICAgICAgICAgICAgICAgDQorICAgICAg ICAgICAgICAgIC8vIEFkZGl0aW9uYWwgT3BlcmF0aW9uIGluIDQuNS4zLjIwDQogICAgICAgICAg ICAgICAgIGlmIChmZWF0dXJlLmVxdWFscygicGFyZW50IikpIHsNCiAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBpbnRlcm5hbE9jbChzdWJqZWN0LCB2dCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgInNlbGYuZ2VuZXJhbGl6YXRpb24ucGFyZW50Iik7DQotICAgICAgICAgICAgICAg IH0gICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgIH0NCiANCiAgICAgICAgICAgICAg ICAgaWYgKGZlYXR1cmUuZXF1YWxzKCJhbGxQYXJlbnRzIikpIHsNCiAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBpbnRlcm5hbE9jbChzdWJqZWN0LCB2dCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgInNlbGYucGFyZW50LT51bmlvbihzZWxmLnBhcmVudC5hbGxQYXJlbnRzKSIpOw0K LSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIA0KLSAgICAgICAgICAgICAgICANCisg ICAgICAgICAgICAgICAgfQ0KKw0KICAgICAgICAgICAgIH0NCi0gICAgICAgIH0gICAgICAgICAg ICAgICAgDQotICAgICAgICANCi0gICAgICAgIC8qIDQuNS4yLjI0IEdlbmVyYWxpemF0aW9uICov ICAgICAgICAgIA0KLSAgICAgICAgDQorICAgICAgICB9DQorDQorICAgICAgICAvKiA0LjUuMi4y NCBHZW5lcmFsaXphdGlvbiAqLw0KKw0KICAgICAgICAgaWYgKE1vZGVsLmdldEZhY2FkZSgpLmlz QUdlbmVyYWxpemF0aW9uKHN1YmplY3QpKSB7DQogICAgICAgICAgICAgaWYgKHR5cGUuZXF1YWxz KCIuIikpIHsNCiAgICAgICAgICAgICAgICAgaWYgKGZlYXR1cmUuZXF1YWxzKCJkaXNjcmltaW5h dG9yIikpIHsNCkBAIC00NzksMTIgKzQ4MCwxMiBAQA0KICAgICAgICAgICAgICAgICBpZiAoZmVh dHVyZS5lcXVhbHMoInNwZWNpYWxpemF0aW9uIikpIHsNCiAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBuZXcgSGFzaFNldDxPYmplY3Q+KE1vZGVsLmdldEZhY2FkZSgpDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC5nZXRTcGVjaWFsaXphdGlvbnMoc3ViamVjdCkpOw0KLSAgICAgICAg ICAgICAgICB9ICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICB9DQogICAgICAgICAg ICAgfQ0KLSAgICAgICAgfSAgICAgICAgICAgICAgICANCi0gICAgICAgICAgICAgICAgDQotICAg ICAgICAvKiA0LjUuMi4yNiBNZXRob2QgKi8gICAgICAgICAgDQotICAgICAgICANCisgICAgICAg IH0NCisNCisgICAgICAgIC8qIDQuNS4yLjI2IE1ldGhvZCAqLw0KKw0KICAgICAgICAgaWYgKE1v ZGVsLmdldEZhY2FkZSgpLmlzQU1ldGhvZChzdWJqZWN0KSkgew0KICAgICAgICAgICAgIGlmICh0 eXBlLmVxdWFscygiLiIpKSB7DQogICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLmVxdWFscygi Ym9keSIpKSB7DQpAQCAtNDk1LDE2ICs0OTYsMTYgQEANCiAgICAgICAgICAgICAgICAgfQ0KICAg ICAgICAgICAgIH0NCiAgICAgICAgIH0NCi0gICAgICAgIA0KLSAgICAgICAgLyogNC41LjIuMjcg TW9kZWxFbGVtZW50ICovICAgICAgICAgIA0KLSAgICAgICAgDQorDQorICAgICAgICAvKiA0LjUu Mi4yNyBNb2RlbEVsZW1lbnQgKi8NCisNCiAgICAgICAgIGlmIChNb2RlbC5nZXRGYWNhZGUoKS5p c0FNb2RlbEVsZW1lbnQoc3ViamVjdCkpIHsNCiAgICAgICAgICAgICBpZiAodHlwZS5lcXVhbHMo Ii4iKSkgew0KICAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZS5lcXVhbHMoIm5hbWUiKSkgew0K ICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBNb2RlbC5nZXRGYWNhZGUoKS5nZXRO YW1lKHN1YmplY3QpOw0KICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgew0K ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gY2hlY2sgY29uZm9ybWFuY3kgdG8gc3Bl Y2lmaWNhdGlvbg0KLSAgICAgICAgICAgICAgICAgICAgICAgIA0KKw0KICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIGF2b2lkaW5nIG51bGwgbmFtZXMNCiAgICAgICAgICAgICAgICAgICAgICAg ICBuYW1lID0gIiI7DQogICAgICAgICAgICAgICAgICAgICB9DQpAQCAtNTEyLDI3ICs1MTMsMjcg QEANCiAgICAgICAgICAgICAgICAgfQ0KIA0KICAgICAgICAgICAgICAgICAvLyBUT0RPIGFzQXJn dW1lbnQ/Pw0KLSAgICAgICAgICAgICAgICANCisNCiAgICAgICAgICAgICAgICAgaWYgKGZlYXR1 cmUuZXF1YWxzKCJjbGllbnREZXBlbmRlbmN5IikpIHsNCiAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBuZXcgSGFzaFNldDxPYmplY3Q+KE1vZGVsLmdldEZhY2FkZSgpDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC5nZXRDbGllbnREZXBlbmRlbmNpZXMoc3ViamVjdCkpOw0KLSAgICAg ICAgICAgICAgICB9ICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICB9DQogICAgICAg ICAgICAgICAgIGlmIChmZWF0dXJlLmVxdWFscygiY29uc3RyYWludCIpKSB7DQogICAgICAgICAg ICAgICAgICAgICByZXR1cm4gbmV3IEhhc2hTZXQ8T2JqZWN0PihNb2RlbC5nZXRGYWNhZGUoKQ0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0Q29uc3RyYWludHMoc3ViamVjdCkpOw0K ICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIA0KKw0KICAgICAgICAgICAgICAg ICAvLyBUT0RPIGltcGxlbWVudGF0aW9uTG9jYXRpb24/Pw0KLSAgICAgICAgICAgICAgICANCisN CiAgICAgICAgICAgICAgICAgaWYgKGZlYXR1cmUuZXF1YWxzKCJuYW1lc3BhY2UiKSkgew0KICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIE1vZGVsLmdldEZhY2FkZSgpLmdldE5hbWVzcGFjZShz dWJqZWN0KTsNCi0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICANCisgICAgICAgICAg ICAgICAgfQ0KIA0KLSAgICAgICAgICAgICAgICAvLyBUT0RPIHByZXNlbnRhdGlvbj8/ICAgICAg ICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICAvLyBUT0RPIHByZXNlbnRhdGlvbj8/DQogICAg ICAgICAgICAgICAgIGlmIChmZWF0dXJlLmVxdWFscygic3VwcGxpZXJEZXBlbmRlbmN5IikpIHsN CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSGFzaFNldDxPYmplY3Q+KE1vZGVsLmdl dEZhY2FkZSgpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTdXBwbGllckRlcGVu ZGVuY2llcyhzdWJqZWN0KSk7DQotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgDQor ICAgICAgICAgICAgICAgIH0NCiANCiAgICAgICAgICAgICAgICAgaWYgKGZlYXR1cmUuZXF1YWxz KCJ0ZW1wbGF0ZVBhcmFtZXRlciIpKSB7DQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTW9k ZWwuZ2V0RmFjYWRlKCkuZ2V0VGVtcGxhdGVQYXJhbWV0ZXJzKHN1YmplY3QpOw0KQEAgLTU0Niwy OSArNTQ3LDI5IEBADQogICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLmVxdWFscygidGFnZ2Vk VmFsdWUiKSkgew0KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1vZGVsLmdldEZhY2FkZSgp LmdldFRhZ2dlZFZhbHVlc0NvbGxlY3Rpb24oc3ViamVjdCk7DQogICAgICAgICAgICAgICAgIH0N Ci0gICAgICAgICAgICAgICAgDQorDQogICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLmVxdWFs cygiY29uc3RyYWludCIpKSB7DQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTW9kZWwuZ2V0 RmFjYWRlKCkuZ2V0Q29uc3RyYWludHMoc3ViamVjdCk7DQogICAgICAgICAgICAgICAgIH0NCi0g ICAgICAgICAgICAgICAgDQorDQogICAgICAgICAgICAgICAgIC8vIEFkZGl0aW9uYWwgT3BlcmF0 aW9ucyBpbiA0LjUuMy4yNQ0KICAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZS5lcXVhbHMoInN1 cHBsaWVyIikpIHsNCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbE9jbChzdWJq ZWN0LCB2dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbGYuY2xpZW50RGVwZW5k ZW5jeS5zdXBwbGllciIpOw0KLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICANCisgICAgICAgICAgICAgICAgfQ0KIA0KICAgICAgICAgICAgICAgICBpZiAo ZmVhdHVyZS5lcXVhbHMoImFsbFN1cHBsaWVycyIpKSB7DQogICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gaW50ZXJuYWxPY2woc3ViamVjdCwgdnQsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJzZWxmLnN1cHBsaWVyLT51bmlvbihzZWxmLnN1cHBsaWVyLmFsbFN1cHBsaWVycykiKTsN CiAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICANCisNCiAgICAgICAgICAgICAg ICAgaWYgKGZlYXR1cmUuZXF1YWxzKCJtb2RlbCIpKSB7DQogICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gaW50ZXJuYWxPY2woc3ViamVjdCwgdnQsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJzZWxmLm5hbWVzcGFjZS0+Ig0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJ1 bmlvbihzZWxmLm5hbWVzcGFjZS5hbGxTdXJyb3VuZGluZ05hbWVzcGFjZXMpLT4iDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICsgInNlbGVjdCggbnN8IG5zLm9jbElzS2luZE9mIChNb2Rl bCkpIik7DQogICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgDQorDQogICAgICAg ICAgICAgICAgIGlmIChmZWF0dXJlLmVxdWFscygiaXNUZW1wbGF0ZSIpKSB7DQogICAgICAgICAg ICAgICAgICAgICByZXR1cm4gIU1vZGVsLmdldEZhY2FkZSgpLmdldFRlbXBsYXRlUGFyYW1ldGVy cyhzdWJqZWN0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaXNFbXB0eSgpOw0KQEAg LTU4NCwxMiArNTg1LDEyIEBADQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgInNlbGVj dChvY2xJc0tpbmRPZihCaW5kaW5nKSkuIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAr ICJvY2xBc1R5cGUoQmluZGluZykuYXJndW1lbnQiKTsNCiAgICAgICAgICAgICAgICAgfQ0KLSAg ICAgICAgICAgICAgICANCisNCiAgICAgICAgICAgICB9DQogICAgICAgICB9DQotICAgICAgICAN Ci0gICAgICAgIC8qIDQuNS4yLjI4IE5hbWVzcGFjZSAqLyAgICAgICAgICANCi0gICAgICAgIA0K Kw0KKyAgICAgICAgLyogNC41LjIuMjggTmFtZXNwYWNlICovDQorDQogICAgICAgICBpZiAoTW9k ZWwuZ2V0RmFjYWRlKCkuaXNBTmFtZXNwYWNlKHN1YmplY3QpKSB7DQogICAgICAgICAgICAgaWYg KHR5cGUuZXF1YWxzKCIuIikpIHsNCiAgICAgICAgICAgICAgICAgaWYgKGZlYXR1cmUuZXF1YWxz KCJvd25lZEVsZW1lbnQiKSkgew0KQEAgLTYwMCw3ICs2MDEsNyBAQA0KICAgICAgICAgICAgICAg ICBpZiAoZmVhdHVyZS5lcXVhbHMoImNvbnRlbnRzIikpIHsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAvLyBUT0RPIGludmVzdGlnYXRlIHR5cG8gaW4gc3BlYyEhDQogICAgICAgICAgICAgICAg ICAgICByZXR1cm4gaW50ZXJuYWxPY2woc3ViamVjdCwgdnQsICJzZWxmLm93bmVkRWxlbWVudC0+ Ig0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJ1bmlvbihzZWxmLm93bmVkRWxlbWVu dC0+IiANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAidW5pb24oc2VsZi5vd25lZEVs ZW1lbnQtPiINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAic2VsZWN0KHh8eC5vY2xJ c0tpbmRPZihOYW1lc3BhY2UpKS5jb250ZW50cykiKTsNCiAgICAgICAgICAgICAgICAgfQ0KIA0K QEAgLTYxOSwyNCArNjIwLDI0IEBADQogICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLmVxdWFs cygiYWxsU3Vycm91bmRpbmdOYW1lc3BhY2VzIikpIHsNCiAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBpbnRlcm5hbE9jbChzdWJqZWN0LCB2dCwgInNlbGYubmFtZXNwYWNlLT4iDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICsgInVuaW9uKHNlbGYubmFtZXNwYWNlLmFsbFN1cnJvdW5k aW5nTmFtZXNwYWNlcykiKTsNCi0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgDQotICAgICAgICAgICAgfSAgICAgICAgICAgICAg ICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KICAgICAgICAg fQ0KIA0KLSAgICAgICAgDQotICAgICAgICAvKiA0LjUuMi4yOSBOb2RlICovICAgICAgICAgIA0K LSAgICAgICAgDQorDQorICAgICAgICAvKiA0LjUuMi4yOSBOb2RlICovDQorDQogICAgICAgICBp ZiAoTW9kZWwuZ2V0RmFjYWRlKCkuaXNBTm9kZShzdWJqZWN0KSkgew0KICAgICAgICAgICAgIGlm ICh0eXBlLmVxdWFscygiLiIpKSB7DQogICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLmVxdWFs cygiZGVwbG95ZWRDb21wb25lbnQiKSkgew0KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5l dyBIYXNoU2V0PE9iamVjdD4oTW9kZWwuZ2V0RmFjYWRlKCkNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLmdldERlcGxveWVkQ29tcG9uZW50cyhzdWJqZWN0KSk7DQotICAgICAgICAgICAg ICAgIH0gICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICB9 DQotICAgICAgICB9ICAgICAgICANCisgICAgICAgIH0NCisNCisgICAgICAgIC8qIDQuNS4yLjMw IE9wZXJhdGlvbiAqLw0KIA0KLSAgICAgICAgLyogNC41LjIuMzAgT3BlcmF0aW9uICovICAgICAg ICAgIA0KLSAgICAgICAgDQogICAgICAgICBpZiAoTW9kZWwuZ2V0RmFjYWRlKCkuaXNBT3BlcmF0 aW9uKHN1YmplY3QpKSB7DQogICAgICAgICAgICAgaWYgKHR5cGUuZXF1YWxzKCIuIikpIHsNCiAg ICAgICAgICAgICAgICAgaWYgKGZlYXR1cmUuZXF1YWxzKCJjb25jdXJyZW5jeSIpKSB7DQpAQCAt NjUyLDEwICs2NTMsMTAgQEANCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNb2RlbC5nZXRG YWNhZGUoKS5pc1Jvb3Qoc3ViamVjdCk7DQogICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg ICB9DQotICAgICAgICB9ICAgICAgICAgICAgICAgIA0KLSAgICAgICAgDQotICAgICAgICAvKiA0 LjUuMi4zMSBQYXJhbWV0ZXIgKi8gICAgICAgICAgDQotICAgICAgICANCisgICAgICAgIH0NCisN CisgICAgICAgIC8qIDQuNS4yLjMxIFBhcmFtZXRlciAqLw0KKw0KICAgICAgICAgaWYgKE1vZGVs LmdldEZhY2FkZSgpLmlzQVBhcmFtZXRlcihzdWJqZWN0KSkgew0KICAgICAgICAgICAgIGlmICh0 eXBlLmVxdWFscygiLiIpKSB7DQogICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLmVxdWFscygi ZGVmYXVsdFZhbHVlIikpIHsNCkBAIC02NjUsMTAgKzY2NiwxMCBAQA0KICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIE1vZGVsLmdldEZhY2FkZSgpLmdldEtpbmQoc3ViamVjdCk7DQogICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgICB9DQotICAgICAgICB9ICAgICAgICAgICAgICAgIA0K KyAgICAgICAgfQ0KKw0KKyAgICAgICAgLyogNC41LjIuMzUgUHJvZ3JhbW1pbmdMYW5ndWFnZURh dGFUeXBlICovDQogDQotICAgICAgICAvKiA0LjUuMi4zNSBQcm9ncmFtbWluZ0xhbmd1YWdlRGF0 YVR5cGUgKi8gICAgICAgICAgDQotICAgICAgICANCiAgICAgICAgIC8vIEdvbmUgZnJvbSBVTUwg Mi54LCBzbyB1bnN1cHBvcnRlZCBoZXJlDQogLy8gICAgICAgIGlmIChNb2RlbC5nZXRGYWNhZGUo KS5pc0FQcm9ncmFtbWluZ0xhbmd1YWdlRGF0YVR5cGUoc3ViamVjdCkpIHsNCiAvLyAgICAgICAg ICAgIGlmICh0eXBlLmVxdWFscygiLiIpKSB7DQpAQCAtNjc2LDcgKzY3Nyw3IEBADQogLy8gICAg ICAgICAgICAgICAgICAgIHJldHVybiBNb2RlbC5nZXRGYWNhZGUoKS5nZXRFeHByZXNzaW9uKHN1 YmplY3QpOw0KIC8vICAgICAgICAgICAgICAgIH0NCiAvLyAgICAgICAgICAgIH0NCi0vLyAgICAg ICAgfSAgICAgICAgICAgICAgICANCisvLyAgICAgICAgfQ0KIA0KICAgICAgICAgLyogNC41LjIu MzcgU3RydWN0dXJhbEZlYXR1cmUgKi8NCiANCkBAIC02OTksOCArNzAwLDggQEANCiAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBNb2RlbC5nZXRGYWNhZGUoKS5nZXRUeXBlKHN1YmplY3QpOw0K ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0KLSAgICAgICAgfSAgICAgICAgDQot ICAgICAgICANCisgICAgICAgIH0NCisNCiAgICAgICAgIC8qIDQuNS4yLjM4IFRlbXBsYXRlQXJn dW1lbnQgKi8NCiANCiAgICAgICAgIGlmIChNb2RlbC5nZXRGYWNhZGUoKS5pc0FUZW1wbGF0ZUFy Z3VtZW50KHN1YmplY3QpKSB7DQpAQCAtNzEyLDggKzcxMyw4IEBADQogICAgICAgICAgICAgICAg ICAgICByZXR1cm4gTW9kZWwuZ2V0RmFjYWRlKCkuZ2V0TW9kZWxFbGVtZW50KHN1YmplY3QpOw0K ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0KLSAgICAgICAgfSAgICAgICAgDQot ICAgICAgICANCisgICAgICAgIH0NCisNCiAgICAgICAgIC8qIDQuNS4yLjM5IFRlbXBsYXRlUGFy YW1ldGVyICovDQogDQogICAgICAgICBpZiAoTW9kZWwuZ2V0RmFjYWRlKCkuaXNBVGVtcGxhdGVQ YXJhbWV0ZXIoc3ViamVjdCkpIHsNCkBAIC03MjIsMTYgKzcyMywxNiBAQA0KICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIE1vZGVsLmdldEZhY2FkZSgpLmdldERlZmF1bHRFbGVtZW50KHN1Ympl Y3QpOw0KICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0KLSAgICAgICAgfSAgICAg ICAgICAgICAgICANCi0gICAgICAgIA0KKyAgICAgICAgfQ0KKw0KICAgICAgICAgLyogNC4xMS4z LjUgVXNlQ2FzZSAqLw0KICAgICAgICAgaWYgKE1vZGVsLmdldEZhY2FkZSgpLmlzQVVzZUNhc2Uo c3ViamVjdCkpIHsNCiAgICAgICAgICAgICBpZiAodHlwZS5lcXVhbHMoIi4iKSkgew0KICAgICAg ICAgICAgICAgICBpZiAoZmVhdHVyZS5lcXVhbHMoInNwZWNpZmljYXRpb25QYXRoIikpIHsNCi0g ICAgICAgICAgICAgICAgICAgIC8qICBUaGUgb3BlcmF0aW9uIHNwZWNpZmljYXRpb25QYXRoIHJl c3VsdHMgaW4gYSBzZXQgY29udGFpbmluZyANCisgICAgICAgICAgICAgICAgICAgIC8qICBUaGUg b3BlcmF0aW9uIHNwZWNpZmljYXRpb25QYXRoIHJlc3VsdHMgaW4gYSBzZXQgY29udGFpbmluZw0K ICAgICAgICAgICAgICAgICAgICAgICogYWxsIHN1cnJvdW5kaW5nIE5hbWVzcGFjZXMgdGhhdCBh cmUgbm90IGluc3RhbmNlcyBvZg0KICAgICAgICAgICAgICAgICAgICAgICogIFBhY2thZ2UuDQot ICAgICAgICAgICAgICAgICAgICAgKiAgc3BlY2lmaWNhdGlvblBhdGggOiBTZXQoTmFtZXNwYWNl KSANCisgICAgICAgICAgICAgICAgICAgICAqICBzcGVjaWZpY2F0aW9uUGF0aCA6IFNldChOYW1l c3BhY2UpDQogICAgICAgICAgICAgICAgICAgICAgKiBzcGVjaWZpY2F0aW9uUGF0aCA9IHNlbGYu YWxsU3Vycm91bmRpbmdOYW1lc3BhY2VzLT5zZWxlY3QobiB8DQogICAgICAgICAgICAgICAgICAg ICAgKiAgICBuLm9jbElzS2luZE9mKFN1YnN5c3RlbSkgb3Igbi5vY2xJc0tpbmRPZihDbGFzcykp DQogICAgICAgICAgICAgICAgICAgICAgKiovDQpAQCAtNzQ3LDEzICs3NDgsMTMgQEANCiAgICAg ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCi0gICAgICAgIA0KKw0K ICAgICAgICAgLyogNC41LjMuMiBBc3NvY2lhdGlvbkNsYXNzICovDQogDQogICAgICAgICBpZiAo TW9kZWwuZ2V0RmFjYWRlKCkuaXNBQXNzb2NpYXRpb25DbGFzcyhzdWJqZWN0KSkgew0KICAgICAg ICAgICAgIGlmICh0eXBlLmVxdWFscygiLiIpKSB7DQogICAgICAgICAgICAgICAgIGlmIChmZWF0 dXJlLmVxdWFscygiYWxsQ29ubmVjdGlvbnMiKSkgew0KLSAgICAgICAgICAgICAgICAgICAgLyog VGhlIG9wZXJhdGlvbiBhbGxDb25uZWN0aW9ucyByZXN1bHRzIGluIHRoZSBzZXQgb2YgYWxsIA0K KyAgICAgICAgICAgICAgICAgICAgLyogVGhlIG9wZXJhdGlvbiBhbGxDb25uZWN0aW9ucyByZXN1 bHRzIGluIHRoZSBzZXQgb2YgYWxsDQogICAgICAgICAgICAgICAgICAgICAgKiBBc3NvY2lhdGlv bkVuZHMgb2YgdGhlIEFzc29jaWF0aW9uQ2xhc3MsIGluY2x1ZGluZyBhbGwNCiAgICAgICAgICAg ICAgICAgICAgICAqIGNvbm5lY3Rpb25zIGRlZmluZWQgYnkgaXRzIHBhcmVudCAodHJhbnNpdGl2 ZSBjbG9zdXJlKS4NCiAgICAgICAgICAgICAgICAgICAgICAqLw0KQEAgLTc2MywxMiArNzY0LDEy IEBADQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWxmLmNvbm5lY3Rpb24tPnVuaW9u KHNlbGYucGFyZW50LT5zZWxlY3QoIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAicyB8 IHMub2NsSXNLaW5kT2YoQXNzb2NpYXRpb24pKS0+Y29sbGVjdCgiDQogICAgICAgICAgICAgICAg ICAgICAgICAgICArICJhIDogQXNzb2NpYXRpb24gfCBhLmFsbENvbm5lY3Rpb25zKSktPmFzU2V0 KCkiKTsNCi0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0K LSAgICAgICAgICAgIH0gICAgICAgICAgICANCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAg ICAgIH0NCiAgICAgICAgIH0NCiANCi0gICAgICAgIC8qIDQuNi4yLjMgU3RlcmVvdHlwZSAqLyAg ICAgICAgICANCi0gICAgICAgDQorICAgICAgICAvKiA0LjYuMi4zIFN0ZXJlb3R5cGUgKi8NCisN CiAgICAgICAgIGlmIChNb2RlbC5nZXRGYWNhZGUoKS5pc0FTdGVyZW90eXBlKHN1YmplY3QpKSB7 DQogICAgICAgICAgICAgaWYgKHR5cGUuZXF1YWxzKCIuIikpIHsNCiAgICAgICAgICAgICAgICAg aWYgKGZlYXR1cmUuZXF1YWxzKCJiYXNlQ2xhc3MiKSkgew0KQEAgLTc4Nyw4ICs3ODgsOCBAQA0K ICAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCiANCi0gICAgICAgIC8qIDQuNi4yLjQgVGFnRGVm aW5pdGlvbiAqLyAgICAgICAgICANCi0gICAgICAgIA0KKyAgICAgICAgLyogNC42LjIuNCBUYWdE ZWZpbml0aW9uICovDQorDQogICAgICAgICBpZiAoTW9kZWwuZ2V0RmFjYWRlKCkuaXNBVGFnRGVm aW5pdGlvbihzdWJqZWN0KSkgew0KICAgICAgICAgICAgIGlmICh0eXBlLmVxdWFscygiLiIpKSB7 DQogICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLmVxdWFscygibXVsdGlwbGljaXR5IikpIHsN CkBAIC04MDcsOCArODA4LDggQEANCiAgICAgICAgICAgICB9DQogICAgICAgICB9DQogDQotICAg ICAgICAvKiA0LjYuMi41IFRhZ2dlZFZhbHVlICovICAgICAgICAgIA0KLSAgICAgICAgDQorICAg ICAgICAvKiA0LjYuMi41IFRhZ2dlZFZhbHVlICovDQorDQogICAgICAgICBpZiAoTW9kZWwuZ2V0 RmFjYWRlKCkuaXNBVGFnZ2VkVmFsdWUoc3ViamVjdCkpIHsNCiAgICAgICAgICAgICBpZiAodHlw ZS5lcXVhbHMoIi4iKSkgew0KICAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZS5lcXVhbHMoImRh dGFWYWx1ZSIpKSB7DQpAQCAtODM3LDE0ICs4MzgsMTQgQEANCiAgICAgICAgICAgICB2dC5wdXQo InNlbGYiLCBvbGRTZWxmKTsNCiAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KICAgICAgICAgfSBj YXRjaCAoSW52YWxpZE9jbEV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgTE9HLmVycm9yKCJF eGNlcHRpb24iLCBlKTsNCisgICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwgIkV4Y2Vw dGlvbiIsIGUpOw0KICAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICAgfQ0KICAgICB9 DQogDQogICAgIC8qKg0KICAgICAgKiBBZGQgdGhlIG1ldGFtb2RlbC1tZXRhY2xhc3NlcyBhcyBi dWlsdC1pbiBzeW1ib2xzDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAcGFyYW0gc3ltIHRo ZSBzeW1ib2wNCiAgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHN5bWJvbA0KICAgICAg KiBAc2VlIG9yZy5hcmdvdW1sLnByb2ZpbGUuaW50ZXJuYWwub2NsLk1vZGVsSW50ZXJwcmV0ZXIj Z2V0QnVpbHRJblN5bWJvbChqYXZhLmxhbmcuU3RyaW5nKQ0KDQpNb2RpZmllZDogdHJ1bmsvc3Jj L2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9BY3Rpb25DcmVhdGVFZGdlTW9kZWxFbGVt ZW50LmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2Fy Z291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9BY3Rpb25DcmVh dGVFZGdlTW9kZWxFbGVtZW50LmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYm cjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFw cC9zcmMvb3JnL2FyZ291bWwvdWkvQWN0aW9uQ3JlYXRlRWRnZU1vZGVsRWxlbWVudC5qYXZhCShv cmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL0Fj dGlvbkNyZWF0ZUVkZ2VNb2RlbEVsZW1lbnQuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDAN CkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBD b3B5cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0 IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyBy ZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAq IGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGlj IExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBh bmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNDAsMTAgKzQwLDExIEBADQogDQogaW1wb3J0IGphdmEu YXd0LmV2ZW50LkFjdGlvbkV2ZW50Ow0KIGltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsN CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dn aW5nLkxvZ2dlcjsNCiANCiBpbXBvcnQgamF2YXguc3dpbmcuQWJzdHJhY3RBY3Rpb247DQogDQot aW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5rZXJu ZWwuUHJvamVjdE1hbmFnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLm1vZGVsLklsbGVnYWxNb2Rl bEVsZW1lbnRDb25uZWN0aW9uRXhjZXB0aW9uOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5tb2RlbC5N b2RlbDsNCkBAIC01NSwxMiArNTYsMTIgQEANCiAgKiBAYXV0aG9yIEJvYiBUYXJsaW5nDQogICov DQogcHVibGljIGNsYXNzIEFjdGlvbkNyZWF0ZUVkZ2VNb2RlbEVsZW1lbnQgZXh0ZW5kcyBBYnN0 cmFjdEFjdGlvbiB7DQotICAgIA0KKw0KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIg TE9HID0NCi0gICAgICAgIExvZ2dlci5nZXRMb2dnZXIoRXhwbG9yZXJQb3B1cC5jbGFzcyk7DQot ICAgIA0KLSAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBtZXRhVHlwZTsgDQotICAgIHByaXZhdGUg ZmluYWwgT2JqZWN0IHNvdXJjZTsgDQorICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKEV4cGxvcmVy UG9wdXAuY2xhc3MuZ2V0TmFtZSgpKTsNCisNCisgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbWV0 YVR5cGU7DQorICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IHNvdXJjZTsNCiAgICAgcHJpdmF0ZSBm aW5hbCBPYmplY3QgZGVzdDsNCiANCiAgICAgLyoqDQpAQCAtNzQsOCArNzUsOCBAQA0KICAgICAg KiAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlIHJlbGF0ZXMgdG8gZGVzdGluYXRpb24N CiAgICAgICovDQogICAgIHB1YmxpYyBBY3Rpb25DcmVhdGVFZGdlTW9kZWxFbGVtZW50KA0KLSAg ICAgICAgICAgIGZpbmFsIE9iamVjdCB0aGVNZXRhVHlwZSwgDQotICAgICAgICAgICAgZmluYWwg T2JqZWN0IHRoZVNvdXJjZSwgDQorICAgICAgICAgICAgZmluYWwgT2JqZWN0IHRoZU1ldGFUeXBl LA0KKyAgICAgICAgICAgIGZpbmFsIE9iamVjdCB0aGVTb3VyY2UsDQogICAgICAgICAgICAgZmlu YWwgT2JqZWN0IHRoZURlc3RpbmF0aW9uLA0KICAgICAgICAgICAgIGZpbmFsIFN0cmluZyByZWxh dGlvbnNoaXBEZXNjcikgew0KICAgICAgICAgc3VwZXIoTWVzc2FnZUZvcm1hdC5mb3JtYXQoDQpA QCAtOTAsNyArOTEsNyBAQA0KICAgICB9DQogDQogICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZv cm1lZChBY3Rpb25FdmVudCBlKSB7DQotICAgICAgICBPYmplY3Qgcm9vdE1vZGVsID0gDQorICAg ICAgICBPYmplY3Qgcm9vdE1vZGVsID0NCiAgICAgICAgICAgICBQcm9qZWN0TWFuYWdlci5nZXRN YW5hZ2VyKCkuZ2V0Q3VycmVudFByb2plY3QoKS5nZXRNb2RlbCgpOw0KICAgICAgICAgdHJ5IHsN CiAgICAgICAgICAgICBNb2RlbC5nZXRVbWxGYWN0b3J5KCkuYnVpbGRDb25uZWN0aW9uKA0KQEAg LTEwMiw4ICsxMDMsNyBAQA0KICAgICAgICAgICAgICAgICBudWxsLA0KICAgICAgICAgICAgICAg ICByb290TW9kZWwpOw0KICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbE1vZGVsRWxlbWVudENvbm5l Y3Rpb25FeGNlcHRpb24gZTEpIHsNCi0gICAgICAgICAgICBMT0cuZXJyb3IoIkV4Y2VwdGlvbiIs IGUxKTsNCisgICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwgIkV4Y2VwdGlvbiIsIGUx KTsNCiAgICAgICAgIH0NCiAgICAgfQ0KIH0NCi0NCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdv dW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvRGV0YWlsc1BhbmUuamF2YQ0KVXJsOiBodHRwOi8v YXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9zcmMvYXJnb3Vt bC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL0RldGFpbHNQYW5lLmphdmE/dmlldz1kaWZmJnBhdGhy ZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRy dW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvRGV0YWlsc1BhbmUuamF2YQko b3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9E ZXRhaWxzUGFuZS5qYXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBA DQogLyogJElkJA0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAw OSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiBD b250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHBy b2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZhaWxh YmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQog ICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUg YXQNCkBAIC00OCw2ICs0OCw4IEBADQogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQogaW1w b3J0IGphdmEudXRpbC5JdGVyYXRvcjsNCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0 IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dn ZXI7DQogDQogaW1wb3J0IGphdmF4LnN3aW5nLkljb247DQogaW1wb3J0IGphdmF4LnN3aW5nLkpQ YW5lbDsNCkBAIC01Niw3ICs1OCw2IEBADQogaW1wb3J0IGphdmF4LnN3aW5nLmV2ZW50LkNoYW5n ZUxpc3RlbmVyOw0KIGltcG9ydCBqYXZheC5zd2luZy5ldmVudC5FdmVudExpc3RlbmVyTGlzdDsN CiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1s LmFwcGxpY2F0aW9uLmFwaS5BYnN0cmFjdEFyZ29KUGFuZWw7DQogaW1wb3J0IG9yZy5hcmdvdW1s LmkxOG4uVHJhbnNsYXRvcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwubW9kZWwuTW9kZWw7DQpAQCAt OTEsNyArOTIsOCBAQA0KICAgICAvKioNCiAgICAgICogTG9nZ2VyLg0KICAgICAgKi8NCi0gICAg cHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoRGV0YWls c1BhbmUuY2xhc3MpOw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCisg ICAgICAgIExvZ2dlci5nZXRMb2dnZXIoRGV0YWlsc1BhbmUuY2xhc3MuZ2V0TmFtZSgpKTsNCiAN CiAgICAgLyoqDQogICAgICAqIFRoZSB0b3AgbGV2ZWwgcGFuZSwgd2hpY2ggaXMgYSB0YWJiZWQg cGFuZS4NCkBAIC0xMDMsNyArMTA1LDcgQEANCiAgICAgICovDQogICAgIHByaXZhdGUgT2JqZWN0 IGN1cnJlbnRUYXJnZXQ7DQogDQotICAgIA0KKw0KICAgICAvKioNCiAgICAgICogVGhlIGxpc3Qg b2YgYWxsIHRoZSB0YWJzLCB3aGljaCBhcmUgSlBhbmVscywgaW4gdGhlIEpUYWJiZWRQYW5lIHRh YnMuDQogICAgICAqLw0KQEAgLTEyMCw5ICsxMjIsOSBAQA0KICAgICAgKiB0aW1lLg0KICAgICAg Ki8NCiAgICAgcHJpdmF0ZSBFdmVudExpc3RlbmVyTGlzdCBsaXN0ZW5lckxpc3QgPSBuZXcgRXZl bnRMaXN0ZW5lckxpc3QoKTsNCi0gICAgDQorDQogICAgIHByaXZhdGUgT3JpZW50YXRpb24gb3Jp ZW50YXRpb247DQotICAgIA0KKw0KICAgICBwcml2YXRlIGJvb2xlYW4gaGFzVGFicyA9IGZhbHNl Ow0KIA0KICAgICAvKioNCkBAIC0xNTMsMTQgKzE1NSwxNCBAQA0KICAgICAgKiBAcGFyYW0gdGhl T3JpZW50YXRpb24gaXMgdGhlIG9yaWVudGF0aW9uLg0KICAgICAgKi8NCiAgICAgcHVibGljIERl dGFpbHNQYW5lKFN0cmluZyBjb21wYXNzUG9pbnQsIE9yaWVudGF0aW9uIHRoZU9yaWVudGF0aW9u KSB7DQotICAgICAgICBMT0cuaW5mbygibWFraW5nIERldGFpbHNQYW5lKCIgKyBjb21wYXNzUG9p bnQgKyAiKSIpOw0KLSAgICAgICAgDQorICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJtYWtp bmcgRGV0YWlsc1BhbmUoezB9KSIsIGNvbXBhc3NQb2ludCk7DQorDQogICAgICAgICBvcmllbnRh dGlvbiA9IHRoZU9yaWVudGF0aW9uOw0KIA0KICAgICAgICAgbG9hZFRhYnMoY29tcGFzc1BvaW50 KTsNCi0gICAgICAgIA0KKw0KICAgICAgICAgc2V0T3JpZW50YXRpb24ob3JpZW50YXRpb24pOw0K LSAgICAgICAgDQorDQogICAgICAgICBzZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgpKTsNCiAg ICAgICAgIHNldEZvbnQobmV3IEZvbnQoIkRpYWxvZyIsIEZvbnQuUExBSU4sIDEwKSk7DQogICAg ICAgICBhZGQodG9wTGV2ZWxUYWJiZWRQYW5lLCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsNCkBAIC0x NzEsMjAgKzE3MywyMCBAQA0KICAgICB9DQogDQogICAgIC8qIFRPRE86IFNvbWUgcGFydHMgb2Yg QXJnb1VNTCBoYXZlIHByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIG11bHRpcGxlDQotICAgICAqIGRl dGFpbHMgcGFuZWxzLCBidXQgd2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCANCisgICAgICogZGV0 YWlscyBwYW5lbHMsIGJ1dCB3ZSBjdXJyZW50bHkgb25seSBzdXBwb3J0DQogICAgICAqIHRoZSBk ZWZhdWx0IFNvdXRoIChib3R0b20pIHBhbmVsDQogICAgICAqLw0KICAgICBwcml2YXRlIHZvaWQg bG9hZFRhYnMoU3RyaW5nIGRpcmVjdGlvbikgew0KICAgICAgICAgaWYgKFBvc2l0aW9uLlNvdXRo LnRvU3RyaW5nKCkuZXF1YWxzSWdub3JlQ2FzZShkaXJlY3Rpb24pDQogICAgICAgICAgICAgICAg IC8vIFNwZWNpYWwgY2FzZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eQ0KICAgICAgICAgICAg ICAgICB8fCAiZGV0YWlsIi5lcXVhbHNJZ25vcmVDYXNlKGRpcmVjdGlvbikpIHsNCi0gICAgICAg ICAgICAvKiBUaGUgc291dGggcGFuZWwgYWx3YXlzIGhhcyB0YWJzIC0gYnV0IHRoZXkgYXJlIA0K KyAgICAgICAgICAgIC8qIFRoZSBzb3V0aCBwYW5lbCBhbHdheXMgaGFzIHRhYnMgLSBidXQgdGhl eSBhcmUNCiAgICAgICAgICAgICAgKiBhZGRlZCAobGF0ZXIpIGVsc2V3aGVyZS4NCiAgICAgICAg ICAgICAgKi8NCiAgICAgICAgICAgICBoYXNUYWJzID0gdHJ1ZTsNCi0gICAgICAgIH0gDQorICAg ICAgICB9DQogICAgIH0NCi0gICAgDQorDQogICAgIGJvb2xlYW4gaGFzVGFicygpIHsNCiAgICAg ICAgIHJldHVybiBoYXNUYWJzOw0KICAgICB9DQpAQCAtMTk3LDEwICsxOTksMTAgQEANCiAgICAg ICAgIHJldHVybiB0b3BMZXZlbFRhYmJlZFBhbmU7DQogICAgIH0NCiANCi0gICAgDQorDQogICAg IC8qKg0KLSAgICAgKiBAcGFyYW0gcCB0aGUgcGFuZWwgdG8gYmUgYWRkZWQgDQotICAgICAqIEBw YXJhbSBhdEVuZCB0cnVlID0gYWRkIHRoZSBwYW5lbCBhdCB0aGUgZW5kLCANCisgICAgICogQHBh cmFtIHAgdGhlIHBhbmVsIHRvIGJlIGFkZGVkDQorICAgICAqIEBwYXJhbSBhdEVuZCB0cnVlID0g YWRkIHRoZSBwYW5lbCBhdCB0aGUgZW5kLA0KICAgICAgKiAgICAgICAgICAgICAgICAgIGZhbHNl ID0gYXQgdGhlIGJlZ2lubmluZw0KICAgICAgKi8NCiAgICAgcHVibGljIHZvaWQgYWRkVGFiKEpQ YW5lbCBwLCBib29sZWFuIGF0RW5kKSB7DQpAQCAtMjE1LDkgKzIxNyw5IEBADQogICAgICAgICAg ICAgdGl0bGUgPSBwLmdldE5hbWUoKTsNCiAgICAgICAgIH0NCiAgICAgICAgIGlmIChhdEVuZCkg ew0KLSAgICAgICAgICAgIHRvcExldmVsVGFiYmVkUGFuZS5hZGRUYWIodGl0bGUsIGljb24sIHAp OyANCisgICAgICAgICAgICB0b3BMZXZlbFRhYmJlZFBhbmUuYWRkVGFiKHRpdGxlLCBpY29uLCBw KTsNCiAgICAgICAgICAgICB0YWJQYW5lbExpc3QuYWRkKHApOw0KLSAgICAgICAgfSBlbHNlIHsg DQorICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgIHRvcExldmVsVGFiYmVkUGFuZS5pbnNl cnRUYWIodGl0bGUsIGljb24sIHAsIG51bGwsIDApOw0KICAgICAgICAgICAgIHRhYlBhbmVsTGlz dC5hZGQoMCwgcCk7DQogICAgICAgICB9DQpAQCAtMjI3LDEzICsyMjksMTMgQEANCiAgICAgICog QHBhcmFtIHAgdGhlIHBhbmVsIHRvIGJlIHJlbW92ZWQNCiAgICAgICovDQogICAgIHB1YmxpYyB2 b2lkIHJlbW92ZVRhYihKUGFuZWwgcCkgew0KLSAgICAgICAgdG9wTGV2ZWxUYWJiZWRQYW5lLnJl bW92ZShwKTsgDQorICAgICAgICB0b3BMZXZlbFRhYmJlZFBhbmUucmVtb3ZlKHApOw0KICAgICAg ICAgdGFiUGFuZWxMaXN0LnJlbW92ZShwKTsNCiAgICAgfQ0KIA0KICAgICAvKioNCiAgICAgICog U2VsZWN0cyB0aGUgdG8gZG8gdGFiLCBhbmQgc2V0cyB0aGUgdGFyZ2V0IG9mIHRoYXQgdGFiLg0K LSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIGl0ZW0gdGhlIHNlbGVjdGVkIHRvZG8g aXRlbQ0KICAgICAgKiBAcmV0dXJuIHRydWUgaWYgdG9kbyB0YWIgaXMgcmVhbGx5IHNlbGVjdGVk Lg0KICAgICAgKiBAZGVwcmVjYXRlZCBmb3IgMC4yNS41IGJ5IHRmbW9ycmlzLiBTZW5kIGFuIGV2 ZW50IHRoYXQgVGFiVG9Eb1RhcmdldHMNCkBAIC00NzQsOSArNDc2LDkgQEANCiAgICAgICoge0Bp bmhlcml0RG9jfQ0KICAgICAgKi8NCiAgICAgcHVibGljIHZvaWQgc3RhdGVDaGFuZ2VkKENoYW5n ZUV2ZW50IGUpIHsNCi0gICAgICAgIExPRy5kZWJ1ZygiRGV0YWlsc1BhbmUgc3RhdGUgY2hhbmdl ZCIpOw0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiRGV0YWlsc1BhbmUgc3RhdGUgY2hh bmdlZCIpOw0KICAgICAgICAgQ29tcG9uZW50IHNlbCA9IHRvcExldmVsVGFiYmVkUGFuZS5nZXRT ZWxlY3RlZENvbXBvbmVudCgpOw0KLSAgICAgICAgDQorDQogICAgICAgICAvLyB1cGRhdGUgdGhl IHByZXZpb3VzbHkgc2VsZWN0ZWQgdGFiDQogICAgICAgICBpZiAobGFzdE5vbk51bGxUYWIgPj0g MCkgew0KIAkgICAgSlBhbmVsIHRhYiA9IHRhYlBhbmVsTGlzdC5nZXQobGFzdE5vbk51bGxUYWIp Ow0KQEAgLTQ4NiwxNCArNDg4LDE0IEBADQogCSAgICB9DQogICAgICAgICB9DQogICAgICAgICBP YmplY3QgdGFyZ2V0ID0gVGFyZ2V0TWFuYWdlci5nZXRJbnN0YW5jZSgpLmdldFNpbmdsZVRhcmdl dCgpOw0KLSAgICAgICAgDQorDQogICAgICAgICBpZiAoIShzZWwgaW5zdGFuY2VvZiBUYWJUb0Rv VGFyZ2V0KSAmJiAhKHNlbCBpbnN0YW5jZW9mIFRhYlByb3BzKSkgew0KLSAgICAgICAgICAgIC8v IFRPRE86IEJvYiBzYXlzIC0gdGFicyB0aGF0IGxpc3RlbiBmb3IgdGFyZ2V0IGNoYW5nZXMgDQot ICAgICAgICAgICAgLy8gc2hvdWxkIHJlZ2lzdGVyIHRoZW1zZWx2ZXMgbm90IGV4cGVjdCBEZXRh aWxzUGFuZSB0byANCisgICAgICAgICAgICAvLyBUT0RPOiBCb2Igc2F5cyAtIHRhYnMgdGhhdCBs aXN0ZW4gZm9yIHRhcmdldCBjaGFuZ2VzDQorICAgICAgICAgICAgLy8gc2hvdWxkIHJlZ2lzdGVy IHRoZW1zZWx2ZXMgbm90IGV4cGVjdCBEZXRhaWxzUGFuZSB0bw0KICAgICAgICAgICAgIC8vIGxp c3RlbiBhbmQgcGFzcyBvbiB0aGUgZXZlbnQuIE90aGVyd2lzZSB0aGVzZSB0YWJzDQotICAgICAg ICAgICAgLy8gYWx3YXlzIHJlbHkgb24gRGV0YWlsc1BhbmUuIFRhYlRvRG9UYXJnZXQgYW5kIFRh YlByb3BzIA0KKyAgICAgICAgICAgIC8vIGFsd2F5cyByZWx5IG9uIERldGFpbHNQYW5lLiBUYWJU b0RvVGFyZ2V0IGFuZCBUYWJQcm9wcw0KICAgICAgICAgICAgIC8vIGN1cnJlbnRseSBsaXN0ZW4g ZGlyZWN0bHkuDQotICAgICAgICAgICAgDQorDQogICAgICAgICAgICAgLy8gVGhlIG90aGVyIHRh YnMgbmVlZCB0byBiZSB1cGRhdGVkIGRlcGVuZGluZyBvbiB0aGUgc2VsZWN0aW9uLg0KICAgICAg ICAgICAgIGlmIChzZWwgaW5zdGFuY2VvZiBUYWJUYXJnZXQpIHsNCiAgICAgICAgICAgICAgICAg KChUYWJUYXJnZXQpIHNlbCkuc2V0VGFyZ2V0KHRhcmdldCk7DQpAQCAtNTA1LDEyICs1MDcsMTIg QEANCiAgICAgICAgICAgICAgICAgLy8gYSBuZXcgc2V0IHRhcmdldCBldmVudCBmb3IgaXQgdG8g cmVmcmVzaCBpdA0KICAgICAgICAgICAgICAgICAoKFRhcmdldExpc3RlbmVyKSBzZWwpLnRhcmdl dFNldChuZXcgVGFyZ2V0RXZlbnQodGhpcywNCiAgICAgICAgICAgICAgICAgICAgICAgICBUYXJn ZXRFdmVudC5UQVJHRVRfU0VULCBuZXcgT2JqZWN0W10ge30sDQotICAgICAgICAgICAgICAgICAg ICAgICAgbmV3IE9iamVjdFtdIHsgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdl dCANCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10gew0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0YXJnZXQNCiAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7DQog ICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KLSAgICAgICAgDQorDQogICAgICAgICBpZiAodGFy Z2V0ICE9IG51bGwNCiAgICAgICAgICAgICAmJiBNb2RlbC5nZXRGYWNhZGUoKS5pc0FVTUxFbGVt ZW50KHRhcmdldCkNCiAgICAgICAgICAgICAmJiB0b3BMZXZlbFRhYmJlZFBhbmUuZ2V0U2VsZWN0 ZWRJbmRleCgpID4gMCkgew0KQEAgLTUyOCw4ICs1MzAsOCBAQA0KICAgICBwdWJsaWMgdm9pZCBt eVNpbmdsZUNsaWNrKGludCB0YWIpIHsNCiAgICAgICAgIC8vVE9ETzogc2hvdWxkIGZpcmUgaXRz IG93biBldmVudCBhbmQgUHJvamVjdEJyb3dzZXINCiAgICAgICAgIC8vc2hvdWxkIHJlZ2lzdGVy IGEgbGlzdGVuZXINCi0gICAgICAgIExPRy5kZWJ1Zygic2luZ2xlOiAiDQotICAgICAgICAgICAg ICAgICsgdG9wTGV2ZWxUYWJiZWRQYW5lLmdldENvbXBvbmVudEF0KHRhYikudG9TdHJpbmcoKSk7 DQorICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJzaW5nbGU6IHswfSIsDQorICAgICAgICAg ICAgICAgIHRvcExldmVsVGFiYmVkUGFuZS5nZXRDb21wb25lbnRBdCh0YWIpLnRvU3RyaW5nKCkp Ow0KICAgICB9DQogDQogICAgIC8qKg0KQEAgLTU0MSw4ICs1NDMsOCBAQA0KICAgICBwdWJsaWMg dm9pZCBteURvdWJsZUNsaWNrKGludCB0YWIpIHsNCiAgICAgICAgIC8vVE9ETzogc2hvdWxkIGZp cmUgaXRzIG93biBldmVudCBhbmQgUHJvamVjdEJyb3dzZXINCiAgICAgICAgIC8vc2hvdWxkIHJl Z2lzdGVyIGEgbGlzdGVuZXINCi0gICAgICAgIExPRy5kZWJ1ZygiZG91YmxlOiAiDQotICAgICAg ICAgICAgICAgICsgdG9wTGV2ZWxUYWJiZWRQYW5lLmdldENvbXBvbmVudEF0KHRhYikudG9TdHJp bmcoKSk7DQorICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJkb3VibGU6IHswfSIsDQorICAg ICAgICAgICAgICAgIHRvcExldmVsVGFiYmVkUGFuZS5nZXRDb21wb25lbnRBdCh0YWIpLnRvU3Ry aW5nKCkpOw0KIC8vICAgICAgICBKUGFuZWwgdCA9IChKUGFuZWwpIHRhYlBhbmVsTGlzdC5lbGVt ZW50QXQodGFiKTsNCiAgICAgICAgIC8vIEN1cnJlbnRseSB0aGlzIGZlYXR1cmUgaXMgZGlzYWJs ZWQgZm9yIEFyZ29VTUwuDQogLy8gICAgICAgIGlmICh0IGluc3RhbmNlb2YgQWJzdHJhY3RBcmdv SlBhbmVsKQ0KQEAgLTY1Myw3ICs2NTUsNyBAQA0KICAgICBwcml2YXRlIHZvaWQgZW5hYmxlVGFi cyhPYmplY3QgdGFyZ2V0KSB7DQogDQogICAgICAgICAvLyBUT0RPOiBRdWljayByZXR1cm4gaGVy ZSBmb3IgdGFyZ2V0ID09IG51bGw/IC0gdGZtDQotICAgICAgICANCisNCiAgICAgICAgIC8vIGl0 ZXJhdGUgdGhyb3VnaCB0aGUgdGFiYmVkIHBhbmVscyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGV5 DQogICAgICAgICAvLyBzaG91bGQgYmUgZW5hYmxlZC4NCiAgICAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgdGFiUGFuZWxMaXN0LnNpemUoKTsgaSsrKSB7DQpAQCAtNjYxLDEzICs2NjMsMTMgQEAN CiAgICAgICAgICAgICBib29sZWFuIHNob3VsZEVuYWJsZSA9IGZhbHNlOw0KICAgICAgICAgICAg IGlmICghKHRhYiBpbnN0YW5jZW9mIFRhYlRvRG9UYXJnZXQpICYmICEodGFiIGluc3RhbmNlb2Yg VGFiUHJvcHMpKSB7DQogICAgICAgICAgICAgICAgIC8vIFRPRE86IEJvYiBzYXlzIC0gdGFicyB0 aGF0IGxpc3RlbiBmb3IgdGFyZ2V0IGNoYW5nZXMNCi0gICAgICAgICAgICAgICAgLy8gc2hvdWxk IHJlZ2lzdGVyIHRoZW1zZWx2ZXMgbm90IGV4cGVjdCBEZXRhaWxzUGFuZSB0byANCisgICAgICAg ICAgICAgICAgLy8gc2hvdWxkIHJlZ2lzdGVyIHRoZW1zZWx2ZXMgbm90IGV4cGVjdCBEZXRhaWxz UGFuZSB0bw0KICAgICAgICAgICAgICAgICAvLyBsaXN0ZW4gYW5kIHBhc3Mgb24gdGhlIGV2ZW50 LiBPdGhlcndpc2UgdGhlc2UgdGFicw0KLSAgICAgICAgICAgICAgICAvLyBhbHdheXMgcmVseSBv biBEZXRhaWxzUGFuZS4gVGFiVG9Eb1RhcmdldCBhbmQgVGFiUHJvcHMgDQorICAgICAgICAgICAg ICAgIC8vIGFsd2F5cyByZWx5IG9uIERldGFpbHNQYW5lLiBUYWJUb0RvVGFyZ2V0IGFuZCBUYWJQ cm9wcw0KICAgICAgICAgICAgICAgICAvLyBjdXJyZW50bHkgbGlzdGVuIGRpcmVjdGx5Lg0KICAg ICAgICAgICAgICAgICBpZiAodGFiIGluc3RhbmNlb2YgVGFyZ2V0TGlzdGVuZXIpIHsNCiAgICAg ICAgICAgICAgICAgICAgIGlmICh0YWIgaW5zdGFuY2VvZiBUYWJUYXJnZXQpIHsNCi0gICAgICAg ICAgICAgICAgICAgICAgICBzaG91bGRFbmFibGUgPSANCisgICAgICAgICAgICAgICAgICAgICAg ICBzaG91bGRFbmFibGUgPQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRhYlRhcmdl dCkgdGFiKS5zaG91bGRCZUVuYWJsZWQodGFyZ2V0KTsNCiAgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhYiBpbnN0YW5jZW9mIFRhYlRv RG9UYXJnZXQpIHsNCkBAIC02ODAsNyArNjgyLDcgQEANCiAgICAgICAgICAgICAgICAgICAgIGlm IChzaG91bGRFbmFibGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUYXJnZXRMaXN0 ZW5lcigoVGFyZ2V0TGlzdGVuZXIpIHRhYik7DQogICAgICAgICAgICAgICAgICAgICB9DQotICAg IA0KKw0KICAgICAgICAgICAgICAgICAgICAgdG9wTGV2ZWxUYWJiZWRQYW5lLnNldEVuYWJsZWRB dChpLCBzaG91bGRFbmFibGUpOw0KICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0K DQpNb2RpZmllZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9EaXNw bGF5VGV4dFRyZWUuamF2YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9i cm93c2UvYXJnb3VtbC90cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL0Rp c3BsYXlUZXh0VHJlZS5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5 OTA3DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3Jj L29yZy9hcmdvdW1sL3VpL0Rpc3BsYXlUZXh0VHJlZS5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVu ay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL0Rpc3BsYXlUZXh0VHJlZS5qYXZh CTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQogLyogJElkJA0KICAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIENvbnRyaWJ1 dG9ycyAtIHNlZSBiZWxvdw0KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEyIENvbnRyaWJ1dG9y cyAtIHNlZSBiZWxvdw0KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQg dGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAgKiB3aGljaCBh Y2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KQEAgLTQ1 LDEyICs0NSwxMyBAQA0KIGltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOw0KIGltcG9ydCBqYXZh LnV0aWwuSXRlcmF0b3I7DQogaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0 aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KIA0K IGltcG9ydCBqYXZheC5zd2luZy5KVHJlZTsNCiBpbXBvcnQgamF2YXguc3dpbmcudHJlZS5UcmVl TW9kZWw7DQogaW1wb3J0IGphdmF4LnN3aW5nLnRyZWUuVHJlZVBhdGg7DQogDQotaW1wb3J0IG9y Zy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5jb2duaXRpdmUuVG9E b0l0ZW07DQogaW1wb3J0IG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5Ub0RvTGlzdDsNCiBpbXBvcnQg b3JnLmFyZ291bWwuaTE4bi5UcmFuc2xhdG9yOw0KQEAgLTcyLDcgKzczLDggQEANCiAgKi8NCiBw dWJsaWMgY2xhc3MgRGlzcGxheVRleHRUcmVlIGV4dGVuZHMgSlRyZWUgew0KIA0KLSAgICBwcml2 YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyLmdldExvZ2dlcihEaXNwbGF5VGV4 dFRyZWUuY2xhc3MpOw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCisg ICAgICAgIExvZ2dlci5nZXRMb2dnZXIoRGlzcGxheVRleHRUcmVlLmNsYXNzLmdldE5hbWUoKSk7 DQogDQogICAgIC8qKg0KICAgICAgKiBBIE1hcCBoZWxwaW5nIHRoZSB0cmVlIG1haW50YWluIGEg Y29uc2lzdGVudCBleHBhbmRlZCBwYXRocyBzdGF0ZS4NCkBAIC0yMDUsNyArMjA3LDcgQEANCiAg ICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICBPYmplY3QgbWUgPSBNb2RlbC5nZXRG YWNhZGUoKS5nZXRJbXBvcnRlZEVsZW1lbnQodmFsdWUpOw0KICAgICAgICAgICAgICAgICBTdHJp bmcgdHlwZU5hbWUgPSBNb2RlbC5nZXRGYWNhZGUoKS5nZXRVTUxDbGFzc05hbWUobWUpOw0KLSAg ICAgICAgICAgICAgICBTdHJpbmcgZWxlbU5hbWUgPSBjb252ZXJ0VmFsdWVUb1RleHQobWUsIHNl bGVjdGVkLCANCisgICAgICAgICAgICAgICAgU3RyaW5nIGVsZW1OYW1lID0gY29udmVydFZhbHVl VG9UZXh0KG1lLCBzZWxlY3RlZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCwg bGVhZiwgcm93LA0KICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ZvY3VzKTsNCiAgICAgICAg ICAgICAgICAgU3RyaW5nIGFsaWFzID0gTW9kZWwuZ2V0RmFjYWRlKCkuZ2V0QWxpYXModmFsdWUp Ow0KQEAgLTIzNSw3ICsyMzcsNyBAQA0KICAgICAgICAgaWYgKE1vZGVsLmdldEZhY2FkZSgpLmlz QUFwcGxpZWRQcm9maWxlRWxlbWVudCh2YWx1ZSkpIHsNCiAgICAgICAgICAgICByZXR1cm4gTW9k ZWwuZ2V0RmFjYWRlKCkuZ2V0TmFtZSh2YWx1ZSk7DQogICAgICAgICB9DQotICAgICAgICANCisN CiAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFyZ29EaWFncmFtKSB7DQogICAgICAgICAg ICAgcmV0dXJuICgoQXJnb0RpYWdyYW0pIHZhbHVlKS5nZXROYW1lKCk7DQogICAgICAgICB9DQpA QCAtMjc3LDkgKzI3OSw5IEBADQogICAgICAgICAgICAgICAgICAgICAgICAgTW9kZWwuZ2V0RmFj YWRlKCkuZ2V0VU1MQ2xhc3NOYW1lKHZhbHVlKQ0KICAgICAgICAgICAgICAgICAgICAgfSk7DQog ICAgICAgICB9DQotICAgICAgICBDb2xsZWN0aW9uIHJlZmVyZW5jZVZhbHVlcyA9IA0KKyAgICAg ICAgQ29sbGVjdGlvbiByZWZlcmVuY2VWYWx1ZXMgPQ0KICAgICAgICAgICAgIE1vZGVsLmdldEZh Y2FkZSgpLmdldFJlZmVyZW5jZVZhbHVlKHZhbHVlKTsNCi0gICAgICAgIENvbGxlY3Rpb24gZGF0 YVZhbHVlcyA9IA0KKyAgICAgICAgQ29sbGVjdGlvbiBkYXRhVmFsdWVzID0NCiAgICAgICAgICAg ICBNb2RlbC5nZXRGYWNhZGUoKS5nZXREYXRhVmFsdWUodmFsdWUpOw0KICAgICAgICAgSXRlcmF0 b3IgaTsNCiAgICAgICAgIGlmIChyZWZlcmVuY2VWYWx1ZXMuc2l6ZSgpID4gMCkgew0KQEAgLTMw MCw5ICszMDIsOSBAQA0KIA0KICAgICAvKioNCiAgICAgICogR2VuZXJhdGUgdGhlIHRleHQgdG8g cmVwcmVzZW50IGEgVHJhbnNpdGlvbi4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJh bSB2YWx1ZSBhIFRyYW5zaXRpb24gVU1MIG9iamVjdA0KLSAgICAgKiBAcmV0dXJuIGEgcmVwcmVz ZW50YXRpb24gb2YgdGhlIFRyYW5zaXRpb24gd2l0aCB0cmlnZ2VyLCBndWFyZCANCisgICAgICog QHJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBUcmFuc2l0aW9uIHdpdGggdHJpZ2dlciwg Z3VhcmQNCiAgICAgICogYW5kIGVmZmVjdA0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSBTdHJpbmcg Zm9ybWF0VHJhbnNpdGlvbkxhYmVsKE9iamVjdCB2YWx1ZSkgew0KQEAgLTMxNSw3ICszMTcsNyBA QA0KICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGF0aW9uUHJvdmlkZXJGYWN0b3J5Mi5UWVBF X1RSQU5TSVRJT04sDQogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsDQogICAgICAgICAg ICAgICAgICAgICAgICAgTm90YXRpb24uZmluZE5vdGF0aW9uKHNldHRpbmdzLmdldE5vdGF0aW9u TGFuZ3VhZ2UoKSkpOw0KLSAgICAgICAgU3RyaW5nIHNpZ25hdHVyZSA9IG5vdGF0aW9uUHJvdmlk ZXIudG9TdHJpbmcodmFsdWUsIA0KKyAgICAgICAgU3RyaW5nIHNpZ25hdHVyZSA9IG5vdGF0aW9u UHJvdmlkZXIudG9TdHJpbmcodmFsdWUsDQogICAgICAgICAgICAgICAgIE5vdGF0aW9uU2V0dGlu Z3MuZ2V0RGVmYXVsdFNldHRpbmdzKCkpOw0KICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCAmJiBu YW1lLmxlbmd0aCgpID4gMCkgew0KICAgICAgICAgICAgIG5hbWUgKz0gIjogIiArIHNpZ25hdHVy ZTsNCkBAIC0zMzAsMTcgKzMzMiwxNyBAQA0KICAgICAgKiBAcmV0dXJuIGEgc3RyaW5nIHJlcHJl c2VudGluZyB0aGUgZ2l2ZW4gc3RlcmVvdHlwZShzKQ0KICAgICAgKi8NCiAgICAgcHVibGljIHN0 YXRpYyBTdHJpbmcgZ2VuZXJhdGVTdGVyZW90eXBlKENvbGxlY3Rpb248T2JqZWN0PiBzdCkgew0K LSAgICAgICAgcmV0dXJuIE5vdGF0aW9uVXRpbGl0eVVtbC5nZW5lcmF0ZVN0ZXJlb3R5cGUoc3Qs IA0KKyAgICAgICAgcmV0dXJuIE5vdGF0aW9uVXRpbGl0eVVtbC5nZW5lcmF0ZVN0ZXJlb3R5cGUo c3QsDQogICAgICAgICAgICAgICAgIGdldE5vdGF0aW9uU2V0dGluZ3MoKS5pc1VzZUd1aWxsZW1l dHMoKSk7DQogICAgIH0NCiANCiAgICAgLyoqDQotICAgICAqIENyZWF0ZSBhIHN0cmluZyByZXBy ZXNlbnRpbmcgdGhlIGdpdmVuIG1vZGVsZWxlbWVudC4gTm9ybWFsbHkgdGhpcyBpcyANCi0gICAg ICoganVzdCB0aGUgbmFtZSwgYnV0IGlmIHRoZSBlbGVtZW50IGlzIG5vdCBuYW1lZCwgc29tZXRo aW5nIGxpa2UgDQorICAgICAqIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGdpdmVu IG1vZGVsZWxlbWVudC4gTm9ybWFsbHkgdGhpcyBpcw0KKyAgICAgKiBqdXN0IHRoZSBuYW1lLCBi dXQgaWYgdGhlIGVsZW1lbnQgaXMgbm90IG5hbWVkLCBzb21ldGhpbmcgbGlrZQ0KICAgICAgKiAi YW5vbnltb3VzIENsYXNzaWZpZXIiIGlzIHJldHVybmVkIHdpdGggaTE4biBhcHBsaWVkLg0KLSAg ICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIG1vZGVsRWxlbWVudCB0aGUgZ2l2ZW4gZWxl bWVudA0KLSAgICAgKiBAcmV0dXJuIGEgcmVjb2duaXphYmxlIG5hbWUgZm9yIHRoZSBlbGVtZW50 IA0KKyAgICAgKiBAcmV0dXJuIGEgcmVjb2duaXphYmxlIG5hbWUgZm9yIHRoZSBlbGVtZW50DQog ICAgICAqIChndWFyYW50ZWVkIHdpdGggbGVuZ3RoID4gMCkNCiAgICAgICovDQogICAgIHB1Ymxp YyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldE1vZGVsRWxlbWVudERpc3BsYXlOYW1lKE9iamVjdCBt b2RlbEVsZW1lbnQpIHsNCkBAIC0zNzEsNyArMzczLDcgQEANCiANCiAgICAgICAgIHN1cGVyLmZp cmVUcmVlRXhwYW5kZWQocGF0aCk7DQogDQotICAgICAgICBMT0cuZGVidWcoImZpcmVUcmVlRXhw YW5kZWQiKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgImZpcmVUcmVlRXhwYW5kZWQi KTsNCiAgICAgICAgIGlmIChyZWV4cGFuZGluZyB8fCBwYXRoID09IG51bGwpIHsNCiAgICAgICAg ICAgICByZXR1cm47DQogICAgICAgICB9DQpAQCAtMzg3LDcgKzM4OSw3IEBADQogDQogICAgICAg ICBzdXBlci5maXJlVHJlZUNvbGxhcHNlZChwYXRoKTsNCiANCi0gICAgICAgIExPRy5kZWJ1Zygi ZmlyZVRyZWVDb2xsYXBzZWQiKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgImZpcmVU cmVlQ29sbGFwc2VkIik7DQogICAgICAgICBpZiAocGF0aCA9PSBudWxsIHx8IGV4cGFuZGVkUGF0 aHNJbk1vZGVsID09IG51bGwpIHsNCiAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICB9DQpA QCAtNDAwLDcgKzQwMiw3IEBADQogICAgICAqLw0KICAgICBwdWJsaWMgdm9pZCBzZXRNb2RlbChU cmVlTW9kZWwgbmV3TW9kZWwpIHsNCiANCi0gICAgICAgIExPRy5kZWJ1Zygic2V0TW9kZWwiKTsN CisgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgInNldE1vZGVsIik7DQogICAgICAgICBPYmpl Y3QgciA9IG5ld01vZGVsLmdldFJvb3QoKTsNCiAgICAgICAgIGlmIChyICE9IG51bGwpIHsNCiAg ICAgICAgICAgICBzdXBlci5zZXRNb2RlbChuZXdNb2RlbCk7DQpAQCAtNDE3LDcgKzQxOSw3IEBA DQogICAgICAqLw0KICAgICBwcm90ZWN0ZWQgTGlzdDxUcmVlUGF0aD4gZ2V0RXhwYW5kZWRQYXRo cygpIHsNCiANCi0gICAgICAgIExPRy5kZWJ1ZygiZ2V0RXhwYW5kZWRQYXRocyIpOw0KKyAgICAg ICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiZ2V0RXhwYW5kZWRQYXRocyIpOw0KICAgICAgICAgVHJl ZU1vZGVsIHRtID0gZ2V0TW9kZWwoKTsNCiAgICAgICAgIExpc3Q8VHJlZVBhdGg+IHJlcyA9IGV4 cGFuZGVkUGF0aHNJbk1vZGVsLmdldCh0bSk7DQogICAgICAgICBpZiAocmVzID09IG51bGwpIHsN CkBAIC00MzUsNyArNDM3LDcgQEANCiAgICAgICovDQogICAgIHByaXZhdGUgdm9pZCByZWV4cGFu ZCgpIHsNCiANCi0gICAgICAgIExPRy5kZWJ1ZygicmVleHBhbmQiKTsNCisgICAgICAgIExPRy5s b2coTGV2ZWwuRklORSwgInJlZXhwYW5kIik7DQogICAgICAgICBpZiAoZXhwYW5kZWRQYXRoc0lu TW9kZWwgPT0gbnVsbCkgew0KICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgIH0NCg0KTW9k aWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvSGVscEJveC5q YXZhDQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1s L3RydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvSGVscEJveC5qYXZhP3Zp ZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL0hlbHBC b3guamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJn b3VtbC91aS9IZWxwQm94LmphdmEJMjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMSw2ICsx LDYgQEANCiAvKiAkSWQkDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChj KSAyMDA5IENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KKyAqIENvcHlyaWdodCAoYykgMjAwOS0y MDEyIENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRo aXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAgKiBhcmUgbWFkZSBh dmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYx LjANCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWls YWJsZSBhdA0KQEAgLTQ0LDYgKzQ0LDggQEANCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsN CiBpbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOw0KIGltcG9ydCBqYXZhLm5l dC5VUkw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0 aWwubG9nZ2luZy5Mb2dnZXI7DQogDQogaW1wb3J0IGphdmF4LnN3aW5nLkpFZGl0b3JQYW5lOw0K IGltcG9ydCBqYXZheC5zd2luZy5KRnJhbWU7DQpAQCAtNTIsNyArNTQsNiBAQA0KIGltcG9ydCBq YXZheC5zd2luZy5ldmVudC5IeXBlcmxpbmtFdmVudDsNCiBpbXBvcnQgamF2YXguc3dpbmcuZXZl bnQuSHlwZXJsaW5rTGlzdGVuZXI7DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2Vy Ow0KIGltcG9ydCBvcmcuYXJnb3VtbC5hcHBsaWNhdGlvbi5oZWxwZXJzLkFwcGxpY2F0aW9uVmVy c2lvbjsNCiBpbXBvcnQgb3JnLmFyZ291bWwuY29nbml0aXZlLlRyYW5zbGF0b3I7DQogDQpAQCAt NjEsNyArNjIsOCBAQA0KICAqLw0KIHB1YmxpYyBjbGFzcyBIZWxwQm94IGV4dGVuZHMgSkZyYW1l IGltcGxlbWVudHMgSHlwZXJsaW5rTGlzdGVuZXIgew0KIA0KLSAgICBwcml2YXRlIHN0YXRpYyBm aW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyLmdldExvZ2dlcihIZWxwQm94LmNsYXNzKTsNCisgICAg cHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9DQorICAgICAgICBMb2dnZXIuZ2V0TG9n Z2VyKEhlbHBCb3guY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgLyoqDQogICAgICAqIEEgdGFi YmVkIHBhbmUgdG8gZGlzcGxheSBzZXZlcmFsIHBhZ2VzIHNpbXVsdGFuZW91c2x5Lg0KQEAgLTgw LDE0ICs4MiwxNCBAQA0KICAgICAgICAgew0KICAgICAgICAgICAgIFRyYW5zbGF0b3IubG9jYWxp emUoInRhYi5oZWxwLm1hbnVhbCIpLA0KICAgICAgICAgICAgIChUcmFuc2xhdG9yLmxvY2FsaXpl KCJ0YWIuaGVscC5wYXRoLm1hbnVhbCIpDQotICAgICAgICAgICAgICAgICsgIm1hbnVhbC0iICsg QXBwbGljYXRpb25WZXJzaW9uLmdldFN0YWJsZVZlcnNpb24oKSANCisgICAgICAgICAgICAgICAg KyAibWFudWFsLSIgKyBBcHBsaWNhdGlvblZlcnNpb24uZ2V0U3RhYmxlVmVyc2lvbigpDQogICAg ICAgICAgICAgICAgICsgIi8iKSwNCiAgICAgICAgICAgICAgVHJhbnNsYXRvci5sb2NhbGl6ZSgi dGFiLmhlbHAudGlwLm1hbnVhbCIpDQogICAgICAgICB9LA0KICAgICAgICAgew0KICAgICAgICAg ICAgIFRyYW5zbGF0b3IubG9jYWxpemUoInRhYi5oZWxwLnN1cHBvcnQiKSwNCiAgICAgICAgICAg ICBUcmFuc2xhdG9yLmxvY2FsaXplKCJ0YWIuaGVscC5wYXRoLnN1cHBvcnQiKSwNCi0gICAgICAg ICAgICBUcmFuc2xhdG9yLmxvY2FsaXplKCJ0YWIuaGVscC50aXAuc3VwcG9ydCIpIA0KKyAgICAg ICAgICAgIFRyYW5zbGF0b3IubG9jYWxpemUoInRhYi5oZWxwLnRpcC5zdXBwb3J0IikNCiAgICAg ICAgIH0NCiAgICAgfTsNCiANCkBAIC0xMTYsMTcgKzExOCwxNyBAQA0KICAgICAgICAgICAgIHRy eSB7DQogICAgICAgICAgICAgICAgIHBhbmVVUkwgPSBuZXcgVVJMKCBwYWdlc1tpXVsxXSk7DQog ICAgICAgICAgICAgfSBjYXRjaCAoIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7DQotICAgICAg ICAgICAgICAgIExPRy53YXJuKCBwYWdlc1tpXVswXSArICIgVVJMIG1hbGZvcm1lZDogIiArIHBh Z2VzW2ldWzFdKTsNCisgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5XQVJOSU5HLCBwYWdl c1tpXVswXSArICIgVVJMIG1hbGZvcm1lZDogIiArIHBhZ2VzW2ldWzFdKTsNCiAgICAgICAgICAg ICB9DQogDQogICAgICAgICAgICAgaWYgKCBwYW5lVVJMICE9IG51bGwpIHsNCiAgICAgICAgICAg ICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgIHBhbmVzW2ldLnNldFBhZ2UoIHBhbmVV UkwpOw0KICAgICAgICAgICAgICAgICB9IGNhdGNoICggSU9FeGNlcHRpb24gZSkgew0KLSAgICAg ICAgICAgICAgICAgICAgTE9HLndhcm4oIkF0dGVtcHRlZCB0byByZWFkIGEgYmFkIFVSTDogIiAr IHBhbmVVUkwpOw0KKyAgICAgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5XQVJOSU5HLCAi QXR0ZW1wdGVkIHRvIHJlYWQgYSBiYWQgVVJMOiAiICsgcGFuZVVSTCk7DQogICAgICAgICAgICAg ICAgIH0NCiAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBMT0cud2Fybigi Q291bGRuJ3QgZmluZCAiICsgcGFnZXNbaV1bMF0pOw0KKyAgICAgICAgICAgICAgICBMT0cubG9n KExldmVsLldBUk5JTkcsICJDb3VsZG4ndCBmaW5kICIgKyBwYWdlc1tpXVswXSk7DQogICAgICAg ICAgICAgfQ0KIA0KICAgICAgICAgICAgIC8vIFB1dCB0aGUgY3VycmVudCBwYW5lIGluIGEgc2Ny b2xsIHBhbmUuDQpAQCAtMTQ3LDcgKzE0OSw3IEBADQogICAgICAgICAgICAgdHJ5IHsNCiAgICAg ICAgICAgICAgICAgcGFuZS5zZXRQYWdlKGV2ZW50LmdldFVSTCgpKTsNCiAgICAgICAgICAgICB9 IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsNCi0gICAgICAgICAgICAgICAgTE9HLndhcm4oICJD b3VsZCBub3QgZmV0Y2ggcmVxdWVzdGVkIFVSTCIpOw0KKyAgICAgICAgICAgICAgICBMT0cubG9n KExldmVsLldBUk5JTkcsICJDb3VsZCBub3QgZmV0Y2ggcmVxdWVzdGVkIFVSTCIpOw0KICAgICAg ICAgICAgIH0NCiAJfQ0KICAgICB9DQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAv c3JjL29yZy9hcmdvdW1sL3VpL0xvYWRTd2luZ1dvcmtlci5qYXZhDQpVcmw6IGh0dHA6Ly9hcmdv dW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdvdW1sLWFw cC9zcmMvb3JnL2FyZ291bWwvdWkvTG9hZFN3aW5nV29ya2VyLmphdmE/dmlldz1kaWZmJnBhdGhy ZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRy dW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvTG9hZFN3aW5nV29ya2VyLmph dmEJKG9yaWdpbmFsKQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwv dWkvTG9hZFN3aW5nV29ya2VyLmphdmEJMjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMSw2 ICsxLDYgQEANCiAvKiAkSWQkDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0 IChjKSAyMDA5IENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KKyAqIENvcHlyaWdodCAoYykgMjAw OS0yMDEyIENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu IFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAgKiBhcmUgbWFk ZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNl IHYxLjANCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2 YWlsYWJsZSBhdA0KQEAgLTM5LDEwICszOSwxMSBAQA0KIHBhY2thZ2Ugb3JnLmFyZ291bWwudWk7 DQogaW1wb3J0IGphdmEuaW8uRmlsZTsNCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitp bXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5n LkxvZ2dlcjsNCiANCiBpbXBvcnQgamF2YXguc3dpbmcuVUlNYW5hZ2VyOw0KIA0KLWltcG9ydCBv cmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwuaTE4bi5UcmFuc2xh dG9yOw0KIGltcG9ydCBvcmcuYXJnb3VtbC50YXNrbWdtdC5Qcm9ncmVzc01vbml0b3I7DQogaW1w b3J0IG9yZy5hcmdvdW1sLnV0aWwuQXJnb0ZyYW1lOw0KQEAgLTU2LDE0ICs1NywxNSBAQA0KIEBE ZXByZWNhdGVkDQogY2xhc3MgTG9hZFN3aW5nV29ya2VyIGV4dGVuZHMgU3dpbmdXb3JrZXIgew0K IA0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyLmdldExvZ2dl cihMb2FkU3dpbmdXb3JrZXIuY2xhc3MpOw0KLSAgICANCisgICAgcHJpdmF0ZSBzdGF0aWMgZmlu YWwgTG9nZ2VyIExPRyA9DQorICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKExvYWRTd2luZ1dvcmtl ci5jbGFzcy5nZXROYW1lKCkpOw0KKw0KICAgICBwcml2YXRlIGJvb2xlYW4gc2hvd1VpOw0KICAg ICBwcml2YXRlIEZpbGUgZmlsZTsNCiANCiAgICAgLyoqDQogICAgICAqIFRoaXMgaXMgdGhlIG9u bHkgY29uc3RydWN0b3IgZm9yIExvYWRTd2luZ1dvcmtlci4NCi0gICAgICogDQorICAgICAqDQog ICAgICAqIEBwYXJhbSBhRmlsZQkJdGhlIGZpbGUgdGhhdCdzIGdvaW5nIHRvIGJlIG9wZW5lZCBh cyBhIHByb2plY3QNCiAgICAgICogQHBhcmFtIGFTaG93VWkJd2hldGhlciB0byBzaG93IHRoZSBV SSBvciBub3QNCiAgICAgICovDQpAQCAtNzIsMTIgKzc0LDEyIEBADQogICAgICAgICB0aGlzLnNo b3dVaSA9IGFTaG93VWk7DQogICAgICAgICB0aGlzLmZpbGUgPSBhRmlsZTsNCiAgICAgfQ0KLQkN CisNCiAgICAgLyoqDQogICAgICAqIEltcGxlbWVudHMgb3JnLmFyZ291bWwuc3dpbmdleHQuU3dp bmdXb3JrZXIjY29uc3RydWN0KCk7IHRoaXMgaXMNCiAgICAgICogdGhlIG1haW4gbWV0aG9kIGZv ciB0aGlzIFN3aW5nV29ya2VyLg0KICAgICAgKiBJbiB0aGlzIGNhc2UsIGl0IHNpbXBseSBsb2Fk cyB0aGUgcHJvamVjdC4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBwbXcJdGhl IFByb2dyZXNzTW9uaXRvcldpbmRvdyB1c2VkIGJ5IFByb2plY3RCcm93c2VyDQogICAgICAqIEBy ZXR1cm4JCWFsd2F5cyBudWxsDQogICAgICAqLw0KQEAgLTkxLDE5ICs5MywxOSBAQA0KICAgICB9 DQogDQogICAgIC8qKg0KLSAgICAgKiBJbXBsZW1lbnRzIG9yZy5hcmdvdW1sLnN3aW5nZXh0LlN3 aW5nV29ya2VyI2luaXRQcm9ncmVzc01vbml0b3JXaW5kb3coKTsgDQorICAgICAqIEltcGxlbWVu dHMgb3JnLmFyZ291bWwuc3dpbmdleHQuU3dpbmdXb3JrZXIjaW5pdFByb2dyZXNzTW9uaXRvcldp bmRvdygpOw0KICAgICAgKiBpdCBqdXN0IGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUHJvZ3Jlc3NN b25pdG9yV2luZG93Lg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHJldHVybiAgYW4gaW5z dGFuY2Ugb2YgUHJvZ3Jlc3NNb25pdG9yV2luZG93DQogICAgICAqLw0KICAgICBwdWJsaWMgUHJv Z3Jlc3NNb25pdG9yIGluaXRQcm9ncmVzc01vbml0b3JXaW5kb3coKSB7DQotICAgICAgICBVSU1h bmFnZXIucHV0KCJQcm9ncmVzc01vbml0b3IucHJvZ3Jlc3NUZXh0IiwgDQorICAgICAgICBVSU1h bmFnZXIucHV0KCJQcm9ncmVzc01vbml0b3IucHJvZ3Jlc3NUZXh0IiwNCiAgICAgICAgICAgICAg ICAgVHJhbnNsYXRvci5sb2NhbGl6ZSgiZmlsZWNob29zZXIub3Blbi1wcm9qZWN0IikpOw0KICAg ICAgICAgT2JqZWN0W10gbXNnQXJncyA9IG5ldyBPYmplY3RbXSB7dGhpcy5maWxlLmdldFBhdGgo KX07DQogICAgICAgICByZXR1cm4gbmV3IFByb2dyZXNzTW9uaXRvcldpbmRvdyhBcmdvRnJhbWUu Z2V0RnJhbWUoKSwNCiAgICAgICAgICAgICAgICAgVHJhbnNsYXRvci5tZXNzYWdlRm9ybWF0KCJk aWFsb2cub3BlbnByb2plY3QudGl0bGUiLCBtc2dBcmdzKSk7DQogICAgIH0NCi0gICAgDQorDQog ICAgIC8qKg0KICAgICAgKiBPdmVycmlkZXMgdGhlIGZpbmlzaGVkIG1ldGhvZCBvZiB0aGUgU3dp bmdXb3JrZXIgY2xhc3MgdG8gdXBkYXRlIHRoZSBHVUkNCiAgICAgICovDQpAQCAtMTEyLDcgKzEx NCw3IEBADQogICAgIAl0cnkgew0KICAgICAJICAgIFByb2plY3RCcm93c2VyLmdldEluc3RhbmNl KCkuYWRkRmlsZVNhdmVkKGZpbGUpOw0KICAgICAJfSBjYXRjaCAoSU9FeGNlcHRpb24gZXhjKSB7 DQotICAgICAgICAgICAgTE9HLmVycm9yKCJGYWlsZWQgdG8gc2F2ZSBmaWxlOiAiICsgZmlsZQ0K KyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiRmFpbGVkIHRvIHNhdmUgZmlsZTog IiArIGZpbGUNCiAgICAgICAgICAgICAgICAgICAgICsgIiBpbiBtb3N0IHJlY2VudGx5IHVzZWQg bGlzdCIpOw0KICAgICAJfQ0KICAgICB9DQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1h cHAvc3JjL29yZy9hcmdvdW1sL3VpL0xvb2tBbmRGZWVsTWdyLmphdmENClVybDogaHR0cDovL2Fy Z291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwt YXBwL3NyYy9vcmcvYXJnb3VtbC91aS9Mb29rQW5kRmVlbE1nci5qYXZhP3ZpZXc9ZGlmZiZwYXRo cmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0 cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL0xvb2tBbmRGZWVsTWdyLmph dmEJKG9yaWdpbmFsKQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwv dWkvTG9va0FuZEZlZWxNZ3IuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYg KzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQg KGMpIDIwMDkgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5 LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4g VGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRl IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ug djEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZh aWxhYmxlIGF0DQpAQCAtNDUsNiArNDUsOCBAQA0KIHBhY2thZ2Ugb3JnLmFyZ291bWwudWk7DQog DQogaW1wb3J0IGphdmEuYXd0LkZvbnQ7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVs Ow0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQogaW1wb3J0IGphdmF4LnN3 aW5nLkxvb2tBbmRGZWVsOw0KIGltcG9ydCBqYXZheC5zd2luZy5VSU1hbmFnZXI7DQpAQCAtNTMs NyArNTUsNiBAQA0KIGltcG9ydCBqYXZheC5zd2luZy5wbGFmLm1ldGFsLk1ldGFsTG9va0FuZEZl ZWw7DQogaW1wb3J0IGphdmF4LnN3aW5nLnBsYWYubWV0YWwuTWV0YWxUaGVtZTsNCiANCi1pbXBv cnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmFwcGxpY2F0 aW9uLmFwaS5BcmdvOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5jb25maWd1cmF0aW9uLkNvbmZpZ3Vy YXRpb247DQogDQpAQCAtNzgsNyArNzksNyBAQA0KICAgICAvKioNCiAgICAgICogTG9nZ2VyLg0K ICAgICAgKi8NCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5n ZXRMb2dnZXIoTG9va0FuZEZlZWxNZ3IuY2xhc3MpOw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5h bCBMb2dnZXIgTE9HID0gTG9nZ2VyLmdldExvZ2dlcihMb29rQW5kRmVlbE1nci5jbGFzcy5nZXRO YW1lKCkpOw0KIA0KICAgICAvKioNCiAgICAgICogVGhlIGluc3RhbmNlLg0KQEAgLTQ1MSwxMyAr NDUyLDEzIEBADQogICAgICAgICAgICAgICAgIFVJTWFuYWdlci5zZXRMb29rQW5kRmVlbChsYWZD bGFzcyk7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRMb29r QW5kRmVlbEV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgTE9HLmVycm9yKGUpOw0KKyAgICAg ICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiIiwgZSk7DQogICAgICAgICB9IGNhdGNoIChD bGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICBMT0cuZXJyb3IoZSk7DQor ICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsICIiLCBlKTsNCiAgICAgICAgIH0gY2F0 Y2ggKEluc3RhbnRpYXRpb25FeGNlcHRpb24gZSkgew0KLSAgICAgICAgICAgIExPRy5lcnJvcihl KTsNCisgICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwgIiIsIGUpOw0KICAgICAgICAg fSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgTE9HLmVy cm9yKGUpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiIiwgZSk7DQogICAg ICAgICB9DQogICAgIH0NCiANCkBAIC00NzksMTMgKzQ4MCwxMyBAQA0KICAgICAgICAgICAgICAg ICBNZXRhbExvb2tBbmRGZWVsLnNldEN1cnJlbnRUaGVtZSh0aGVtZSk7DQogICAgICAgICAgICAg ICAgIFVJTWFuYWdlci5zZXRMb29rQW5kRmVlbChNRVRBTF9MQUZfQ0xBU1NfTkFNRSk7DQogICAg ICAgICAgICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRMb29rQW5kRmVlbEV4Y2VwdGlvbiBlKSB7DQot ICAgICAgICAgICAgICAgIExPRy5lcnJvcihlKTsNCisgICAgICAgICAgICAgICAgTE9HLmxvZyhM ZXZlbC5TRVZFUkUsICIiLCBlKTsNCiAgICAgICAgICAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5k RXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICAgICAgTE9HLmVycm9yKGUpOw0KKyAgICAgICAg ICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwgIiIsIGUpOw0KICAgICAgICAgICAgIH0gY2F0 Y2ggKEluc3RhbnRpYXRpb25FeGNlcHRpb24gZSkgew0KLSAgICAgICAgICAgICAgICBMT0cuZXJy b3IoZSk7DQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiIiwgZSk7DQog ICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7DQotICAgICAg ICAgICAgICAgIExPRy5lcnJvcihlKTsNCisgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5T RVZFUkUsICIiLCBlKTsNCiAgICAgICAgICAgICB9DQogICAgICAgICB9DQogICAgIH0NCg0KTW9k aWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvTXVsdGlFZGl0 b3JQYW5lLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3Nl L2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9NdWx0aUVk aXRvclBhbmUuamF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcv YXJnb3VtbC91aS9NdWx0aUVkaXRvclBhbmUuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3Jj L2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9NdWx0aUVkaXRvclBhbmUuamF2YQkyMDEy LTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0b3JzIC0gc2Vl IGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJl bG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21w YW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVz IHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNDcsNiArNDcsOCBA QA0KIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlz Ow0KIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2 ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiANCiBpbXBvcnQgamF2YXgu c3dpbmcuSlBhbmVsOw0KIGltcG9ydCBqYXZheC5zd2luZy5KVGFiYmVkUGFuZTsNCkBAIC01NCw3 ICs1Niw2IEBADQogaW1wb3J0IGphdmF4LnN3aW5nLmV2ZW50LkNoYW5nZUV2ZW50Ow0KIGltcG9y dCBqYXZheC5zd2luZy5ldmVudC5DaGFuZ2VMaXN0ZW5lcjsNCiANCi1pbXBvcnQgb3JnLmFwYWNo ZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmFwcGxpY2F0aW9uLmFwaS5BYnN0 cmFjdEFyZ29KUGFuZWw7DQogaW1wb3J0IG9yZy5hcmdvdW1sLnVpLnRhcmdldG1hbmFnZXIuVGFy Z2V0RXZlbnQ7DQogaW1wb3J0IG9yZy5hcmdvdW1sLnVpLnRhcmdldG1hbmFnZXIuVGFyZ2V0TGlz dGVuZXI7DQpAQCAtODUsMTMgKzg2LDE0IEBADQogICAgICAgICBtb2RlRmFjdG9yaWVzLmFkZChu ZXcgTW9kZUxhYmVsRHJhZ0ZhY3RvcnkoKSk7DQogICAgICAgICBtb2RlRmFjdG9yaWVzLmFkZChu ZXcgTW9kZVNlbGVjdEZhY3RvcnkoKSk7DQogICAgICAgICBtb2RlRmFjdG9yaWVzLmFkZChuZXcg TW9kZVBvcHVwRmFjdG9yeSgpKTsNCi0gICAgICAgIG1vZGVGYWN0b3JpZXMuYWRkKG5ldyBNb2Rl RHJhZ1Njcm9sbEZhY3RvcnkoKSk7IA0KKyAgICAgICAgbW9kZUZhY3Rvcmllcy5hZGQobmV3IE1v ZGVEcmFnU2Nyb2xsRmFjdG9yeSgpKTsNCiAgICAgICAgIEdsb2JhbHMuc2V0RGVmYXVsdE1vZGVG YWN0b3JpZXMobW9kZUZhY3Rvcmllcyk7DQogICAgIH0NCi0gICAgDQorDQogICAgIC8qKiBsb2dn ZXIgKi8NCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRM b2dnZXIoTXVsdGlFZGl0b3JQYW5lLmNsYXNzKTsNCi0gICAgICAgIA0KKyAgICBwcml2YXRlIHN0 YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCisgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoTXVsdGlF ZGl0b3JQYW5lLmNsYXNzLmdldE5hbWUoKSk7DQorDQogICAgIC8qKg0KICAgICAgKiBDbGFzc2Vz IGZvciB0YWJzIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBwcm9wZXJ0eSBwYW5lbC4NCiAgICAgICog KHByZXZpb3VzbHkgc3RvcmVkIGluIG9yZy9hcmdvdW1sL2FyZ28uaW5pKQ0KQEAgLTEwNyw5ICsx MDksOSBAQA0KIA0KICAgICBwcml2YXRlIEpUYWJiZWRQYW5lIHRhYnMgPSBuZXcgSlRhYmJlZFBh bmUoU3dpbmdDb25zdGFudHMuQk9UVE9NKTsNCiANCi0gICAgcHJpdmF0ZSBMaXN0PEpQYW5lbD4g dGFiUGFuZWxzID0gDQorICAgIHByaXZhdGUgTGlzdDxKUGFuZWw+IHRhYlBhbmVscyA9DQogICAg ICAgICBuZXcgQXJyYXlMaXN0PEpQYW5lbD4oQXJyYXlzLmFzTGlzdCh0YWJJbnN0YW5jZXMpKTsN Ci0gICAgDQorDQogICAgIHByaXZhdGUgQ29tcG9uZW50IGxhc3RUYWI7DQogDQogICAgIC8qKg0K QEAgLTEyMCw3ICsxMjIsNyBAQA0KICAgICAgKiBjYW4gYmUgZWRpdGVkLg0KICAgICAgKi8NCiAg ICAgcHVibGljIE11bHRpRWRpdG9yUGFuZSgpIHsNCi0gICAgICAgIExPRy5pbmZvKCJtYWtpbmcg TXVsdGlFZGl0b3JQYW5lIik7DQorICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJtYWtpbmcg TXVsdGlFZGl0b3JQYW5lIik7DQogDQogICAgICAgICBzZXRMYXlvdXQobmV3IEJvcmRlckxheW91 dCgpKTsNCiAgICAgICAgIGFkZCh0YWJzLCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsNCkBAIC0yNTUs OCArMjU3LDEwIEBADQogICAgICAgICAgICAgbGFzdFRhYi5zZXRWaXNpYmxlKGZhbHNlKTsNCiAg ICAgICAgIH0NCiAgICAgICAgIGxhc3RUYWIgPSB0YWJzLmdldFNlbGVjdGVkQ29tcG9uZW50KCk7 DQotICAgICAgICBMT0cuZGVidWcoDQotICAgICAgICAgICAgIk11bHRpRWRpdG9yUGFuZSBzdGF0 ZSBjaGFuZ2VkOiIgKyBsYXN0VGFiLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsNCisgICAgICAgIExP Ry5sb2coTGV2ZWwuRklORSwNCisgICAgICAgICAgICAgICAgIk11bHRpRWRpdG9yUGFuZSBzdGF0 ZSBjaGFuZ2VkOiB7MH0iLA0KKyAgICAgICAgICAgICAgICBsYXN0VGFiLmdldENsYXNzKCkuZ2V0 TmFtZSgpKTsNCisNCiAgICAgICAgIGxhc3RUYWIuc2V0VmlzaWJsZSh0cnVlKTsNCiAgICAgICAg IGlmIChsYXN0VGFiIGluc3RhbmNlb2YgVGFiTW9kZWxUYXJnZXQpIHsNCiAgICAgICAgICAgICAo KFRhYk1vZGVsVGFyZ2V0KSBsYXN0VGFiKS5yZWZyZXNoKCk7DQpAQCAtMzIxLDcgKzMyNSw3IEBA DQogICAgIHB1YmxpYyB2b2lkIG15U2luZ2xlQ2xpY2soaW50IHRhYikgew0KICAgICAgICAgLy9U T0RPOiBzaG91bGQgZmlyZSBpdHMgb3duIGV2ZW50IGFuZCBQcm9qZWN0QnJvd3Nlcg0KICAgICAg ICAgLy9zaG91bGQgcmVnaXN0ZXIgYSBsaXN0ZW5lcg0KLSAgICAgICAgTE9HLmRlYnVnKCJzaW5n bGU6ICIgKyB0YWJzLmdldENvbXBvbmVudEF0KHRhYikudG9TdHJpbmcoKSk7DQorICAgICAgICBM T0cubG9nKExldmVsLkZJTkUsICJzaW5nbGU6IHswfSIsIHRhYnMuZ2V0Q29tcG9uZW50QXQodGFi KS50b1N0cmluZygpKTsNCiAgICAgfQ0KIA0KICAgICAvKioNCkBAIC0zMzMsNyArMzM3LDcgQEAN CiAgICAgcHVibGljIHZvaWQgbXlEb3VibGVDbGljayhpbnQgdGFiKSB7DQogICAgICAgICAvL1RP RE86IHNob3VsZCBmaXJlIGl0cyBvd24gZXZlbnQgYW5kIFByb2plY3RCcm93c2VyDQogICAgICAg ICAvL3Nob3VsZCByZWdpc3RlciBhIGxpc3RlbmVyDQotICAgICAgICBMT0cuZGVidWcoImRvdWJs ZTogIiArIHRhYnMuZ2V0Q29tcG9uZW50QXQodGFiKS50b1N0cmluZygpKTsNCisgICAgICAgIExP Ry5sb2coTGV2ZWwuRklORSwgImRvdWJsZTogezB9IiwgdGFicy5nZXRDb21wb25lbnRBdCh0YWIp LnRvU3RyaW5nKCkpOw0KIC8vICAgICAgICBKUGFuZWwgdCA9IChKUGFuZWwpIHRhYlBhbmVscy5l bGVtZW50QXQodGFiKTsNCiAgICAgICAgIC8vIEN1cnJlbnRseSB0aGlzIGZlYXR1cmUgaXMgZGlz YWJsZWQgZm9yIEFyZ29VTUwuDQogLy8gICAgICAgIGlmICh0IGluc3RhbmNlb2YgQWJzdHJhY3RB cmdvSlBhbmVsKQ0KQEAgLTM3NCw0ICszNzgsMyBAQA0KICAgICB9DQogDQogfQ0KLQ0KDQpNb2Rp ZmllZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9Qcm9qZWN0QnJv d3Nlci5qYXZhDQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9h cmdvdW1sL3RydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvUHJvamVjdEJy b3dzZXIuamF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJn b3VtbC91aS9Qcm9qZWN0QnJvd3Nlci5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJn b3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL1Byb2plY3RCcm93c2VyLmphdmEJMjAxMi0xMi0z MCAwNTowNjowMS0wODAwDQpAQCAtNjcsNiArNjcsOCBAQA0KIGltcG9ydCBqYXZhLnV0aWwuTGlz dDsNCiBpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsNCiBpbXBvcnQgamF2YS51dGlsLk1hcDsNCitp bXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5n LkxvZ2dlcjsNCiANCiBpbXBvcnQgamF2YXguc3dpbmcuQWJzdHJhY3RBY3Rpb247DQogaW1wb3J0 IGphdmF4LnN3aW5nLkltYWdlSWNvbjsNCkBAIC03OSw3ICs4MSw2IEBADQogaW1wb3J0IGphdmF4 LnN3aW5nLkpUb29sQmFyOw0KIGltcG9ydCBqYXZheC5zd2luZy5Td2luZ1V0aWxpdGllczsNCiAN Ci1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmFw cGxpY2F0aW9uLmFwaS5BYnN0cmFjdEFyZ29KUGFuZWw7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmFw cGxpY2F0aW9uLmFwaS5BcmdvOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5hcHBsaWNhdGlvbi5ldmVu dHMuQXJnb0V2ZW50UHVtcDsNCkBAIC0xNTIsNyArMTUzLDcgQEANCiAgICAgICogTG9nZ2VyLg0K ICAgICAgKi8NCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9DQotICAgICAg ICBMb2dnZXIuZ2V0TG9nZ2VyKFByb2plY3RCcm93c2VyLmNsYXNzKTsNCisgICAgICAgIExvZ2dl ci5nZXRMb2dnZXIoUHJvamVjdEJyb3dzZXIuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiANCiAgICAg LyoqDQpAQCAtMTYyLDE1ICsxNjMsMTUgQEANCiAgICAgICAgIENlbnRlciwgTm9ydGgsIFNvdXRo LCBFYXN0LCBXZXN0LA0KICAgICAgICAgTm9ydGhFYXN0LCBTb3V0aEVhc3QsIFNvdXRoV2VzdCwg Tm9ydGhXZXN0DQogICAgIH0NCi0gICAgDQorDQogICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29ycmVz cG9uZGVuY2UgdGhhdCB3ZSBkZXBlbmQgb24gZG9lc24ndCBjaGFuZ2UNCiAgICAgc3RhdGljIHsN CiAgICAgICAgIGFzc2VydCBQb3NpdGlvbi5DZW50ZXIudG9TdHJpbmcoKS5lcXVhbHMoQm9yZGVy U3BsaXRQYW5lLkNFTlRFUik7DQotICAgICAgICBhc3NlcnQgUG9zaXRpb24uTm9ydGgudG9TdHJp bmcoKS5lcXVhbHMoQm9yZGVyU3BsaXRQYW5lLk5PUlRIKTsgDQotICAgICAgICBhc3NlcnQgUG9z aXRpb24uTm9ydGhFYXN0LnRvU3RyaW5nKCkuZXF1YWxzKEJvcmRlclNwbGl0UGFuZS5OT1JUSEVB U1QpOyANCi0gICAgICAgIGFzc2VydCBQb3NpdGlvbi5Tb3V0aC50b1N0cmluZygpLmVxdWFscyhC b3JkZXJTcGxpdFBhbmUuU09VVEgpOyANCisgICAgICAgIGFzc2VydCBQb3NpdGlvbi5Ob3J0aC50 b1N0cmluZygpLmVxdWFscyhCb3JkZXJTcGxpdFBhbmUuTk9SVEgpOw0KKyAgICAgICAgYXNzZXJ0 IFBvc2l0aW9uLk5vcnRoRWFzdC50b1N0cmluZygpLmVxdWFscyhCb3JkZXJTcGxpdFBhbmUuTk9S VEhFQVNUKTsNCisgICAgICAgIGFzc2VydCBQb3NpdGlvbi5Tb3V0aC50b1N0cmluZygpLmVxdWFs cyhCb3JkZXJTcGxpdFBhbmUuU09VVEgpOw0KICAgICB9DQotICAgIA0KKw0KICAgICAvKioNCiAg ICAgICogRmxhZyB0byBpbmRpY2F0ZSBpZiB3ZSBhcmUgdGhlIG1haW4gYXBwbGljYXRpb24NCiAg ICAgICogb3IgYmVpbmcgaW50ZWdyYXRlZCBpbiBhbm90aGVyIHRvcCBsZXZlbCBhcHBsaWNhdGlv biBzdWNoDQpAQCAtMjAyLDcgKzIwMyw3IEBADQogICAgIHByaXZhdGUgRGV0YWlsc1BhbmUgc291 dGhFYXN0UGFuZTsNCiAgICAgcHJpdmF0ZSBEZXRhaWxzUGFuZSBzb3V0aFBhbmU7DQogDQotICAg IHByaXZhdGUgTWFwPFBvc2l0aW9uLCBEZXRhaWxzUGFuZT4gZGV0YWlsc1BhbmVzQnlDb21wYXNz UG9pbnQgPSANCisgICAgcHJpdmF0ZSBNYXA8UG9zaXRpb24sIERldGFpbHNQYW5lPiBkZXRhaWxz UGFuZXNCeUNvbXBhc3NQb2ludCA9DQogICAgICAgICBuZXcgSGFzaE1hcDxQb3NpdGlvbiwgRGV0 YWlsc1BhbmU+KCk7DQogDQogICAgIHByaXZhdGUgR2VuZXJpY0FyZ29NZW51QmFyIG1lbnVCYXI7 DQpAQCAtMjM1LDcgKzIzNiw3IEBADQogICAgIHByaXZhdGUgSlBhbmVsIHRvZG9QYW5lOw0KIA0K ICAgICAvKioNCi0gICAgICogQSBjbGFzcyB0aGF0IGhhbmRsZXMgdGhlIHRpdGxlIG9mIHRoaXMg ZnJhbWUsIA0KKyAgICAgKiBBIGNsYXNzIHRoYXQgaGFuZGxlcyB0aGUgdGl0bGUgb2YgdGhpcyBm cmFtZSwNCiAgICAgICogZS5nLiB0byBpbmRpY2F0ZSBzYXZlIHN0YXR1cy4NCiAgICAgICovDQog ICAgIHByaXZhdGUgVGl0bGVIYW5kbGVyIHRpdGxlSGFuZGxlciA9IG5ldyBUaXRsZUhhbmRsZXIo KTsNCkBAIC0yNjIsNyArMjYzLDcgQEANCiANCiAgICAgLyoqDQogICAgICAqIFRoZSBjb25zdHJ1 Y3Rvci4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBhcHBsaWNhdGlvbk5hbWUN CiAgICAgICogICAgICAgICAgICB0aGUgdGl0bGUgb2YgdGhlIGZyYW1lDQogICAgICAqIEBwYXJh bSBzcGxhc2gNCkBAIC0yNzAsMTcgKzI3MSwxNyBAQA0KICAgICAgKiBAcGFyYW0gbWFpbkFwcGxp Y2F0aW9uDQogICAgICAqICAgICAgICAgICAgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgd2UgYXJl IHRoZSB0b3AgbGV2ZWwgYXBwbGljYXRpb24uDQogICAgICAqICAgICAgICAgICAgRmFsc2UgaWYg d2UgYXJlIHByb3ZpZGluZyBjb21wb25lbnRzIHRvIGFub3RoZXIgdG9wIGxldmVsIGFwcC4NCi0g ICAgICogQHBhcmFtIGxlZnRCb3R0b21QYW5lIA0KKyAgICAgKiBAcGFyYW0gbGVmdEJvdHRvbVBh bmUNCiAgICAgICogICAgICAgICAgICB0aGUgcGFuZWwgdG8gZml0IGluIHRoZSBsZWZ0IGJvdHRv bSBjb3JuZXINCiAgICAgICovDQotICAgIHByaXZhdGUgUHJvamVjdEJyb3dzZXIoU3RyaW5nIGFw cGxpY2F0aW9uTmFtZSwgU3BsYXNoU2NyZWVuIHNwbGFzaCwgDQorICAgIHByaXZhdGUgUHJvamVj dEJyb3dzZXIoU3RyaW5nIGFwcGxpY2F0aW9uTmFtZSwgU3BsYXNoU2NyZWVuIHNwbGFzaCwNCiAg ICAgICAgICAgICAgYm9vbGVhbiBtYWluQXBwbGljYXRpb24sIEpQYW5lbCBsZWZ0Qm90dG9tUGFu ZSkgew0KICAgICAgICAgc3VwZXIoYXBwbGljYXRpb25OYW1lKTsNCiAgICAgICAgIHRoZUluc3Rh bmNlID0gdGhpczsNCiAgICAgICAgIGlzTWFpbkFwcGxpY2F0aW9uID0gbWFpbkFwcGxpY2F0aW9u Ow0KLSAgICAgICAgDQorDQogICAgICAgICBnZXRDb250ZW50UGFuZSgpLnNldEZvbnQoZGVmYXVs dEZvbnQpOw0KLSAgICAgICAgDQorDQogICAgICAgICAvLyBUT0RPOiBUaGlzIGNhdXNlcyBhIGN5 Y2xpYyBkZXBlbmNlbmN5IHdpdGggQWN0aW9uU2F2ZVByb2plY3QNCiAgICAgICAgIHNhdmVBY3Rp b24gPSBuZXcgQWN0aW9uU2F2ZVByb2plY3QoKTsNCiAgICAgICAgIFByb2plY3RNYW5hZ2VyLmdl dE1hbmFnZXIoKS5zZXRTYXZlQWN0aW9uKHNhdmVBY3Rpb24pOw0KQEAgLTMwNSw3ICszMDYsNyBA QA0KICAgICAgICAgICAgIC8vIGFsbG93cyBtZSB0byBhc2sgIkRvIHlvdSB3YW50IHRvIHNhdmUg Zmlyc3Q/Ig0KICAgICAgICAgICAgIHNldERlZmF1bHRDbG9zZU9wZXJhdGlvbihQcm9qZWN0QnJv d3Nlci5ET19OT1RISU5HX09OX0NMT1NFKTsNCiAgICAgICAgICAgICBhZGRXaW5kb3dMaXN0ZW5l cihuZXcgV2luZG93Q2xvc2VyKCkpOw0KLSAgICAgICAgICAgIA0KKw0KICAgICAgICAgICAgIHNl dEFwcGxpY2F0aW9uSWNvbigpOw0KIA0KICAgICAgICAgICAgIC8vIEFkZCBsaXN0ZW5lciBmb3Ig cHJvamVjdCBjaGFuZ2VzDQpAQCAtMzQzLDcgKzM0NCw3IEBADQogICAgICAgICAgICAgICAgICAg ICAvLyBmaWVsZCBpcyBhYm91dCB0byBzdGFydC4NCiAgICAgICAgICAgICAgICAgICAgIC8vIE5v dCBhIGdvb2QgYXNzdW1wdGlvbi4gV2UgTmVlZCB0byBzZWUgaWYgd2UgY2FuIGdldA0KICAgICAg ICAgICAgICAgICAgICAgLy8gcmlkIG9mIHRoaXMuDQotICAgICAgICAgICAgICAgICAgICBQcm9q ZWN0IHAgPSANCisgICAgICAgICAgICAgICAgICAgIFByb2plY3QgcCA9DQogICAgICAgICAgICAg ICAgICAgICAgICAgUHJvamVjdE1hbmFnZXIuZ2V0TWFuYWdlcigpLmdldEN1cnJlbnRQcm9qZWN0 KCk7DQogICAgICAgICAgICAgICAgICAgICBpZiAocCAhPSBudWxsKSB7DQogICAgICAgICAgICAg ICAgICAgICAgICAgcC5nZXRVbmRvTWFuYWdlcigpLnN0YXJ0SW50ZXJhY3Rpb24oIkZvY3VzIik7 DQpAQCAtMzYwLDIwICszNjEsMjAgQEANCiAgICAgcHJpdmF0ZSB2b2lkIHNldEFwcGxpY2F0aW9u SWNvbigpIHsNCiAgICAgICAgIGZpbmFsIEltYWdlSWNvbiBhcmdvSW1hZ2UxNngxNiA9DQogICAg ICAgICAgICAgUmVzb3VyY2VMb2FkZXJXcmFwcGVyLmxvb2t1cEljb25SZXNvdXJjZSgiQXJnb0lj b24xNngxNiIpOw0KLSAgICAgICAgDQorDQogICAgICAgICBmaW5hbCBJbWFnZUljb24gYXJnb0lt YWdlMzJ4MzIgPSBSZXNvdXJjZUxvYWRlcldyYXBwZXINCiAgICAgICAgICAgICAgICAgLmxvb2t1 cEljb25SZXNvdXJjZSgiQXJnb0ljb24zMngzMiIpOw0KICAgICAgICAgZmluYWwgTGlzdDxJbWFn ZT4gYXJnb0ltYWdlcyA9IG5ldyBBcnJheUxpc3Q8SW1hZ2U+KDIpOw0KICAgICAgICAgYXJnb0lt YWdlcy5hZGQoYXJnb0ltYWdlMTZ4MTYuZ2V0SW1hZ2UoKSk7DQogICAgICAgICBhcmdvSW1hZ2Vz LmFkZChhcmdvSW1hZ2UzMngzMi5nZXRJbWFnZSgpKTsNCi0gICAgICAgIA0KKw0KICAgICAgICAg c2V0SWNvbkltYWdlcyhhcmdvSW1hZ2VzKTsNCiAgICAgfQ0KIA0KICAgICAvKioNCiAgICAgICog U2luZ2xldG9uIHJldHJpZXZhbCBtZXRob2QgZm9yIHRoZSBwcm9qZWN0YnJvd3Nlci4NCiAgICAg ICogRG8gbm90IHVzZSB0aGlzIGJlZm9yZSBtYWtlSW5zdGFuY2UgaXMgY2FsbGVkIQ0KLSAgICAg KiAgDQorICAgICAqDQogICAgICAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0 aGUgcHJvamVjdGJyb3dzZXINCiAgICAgICovDQogICAgIHB1YmxpYyBzdGF0aWMgc3luY2hyb25p emVkIFByb2plY3RCcm93c2VyIGdldEluc3RhbmNlKCkgew0KQEAgLTM4NSwxOSArMzg2LDE5IEBA DQogICAgICAqIENyZWF0b3IgbWV0aG9kIGZvciB0aGUgUHJvamVjdEJyb3dzZXIgd2hpY2ggb3B0 aW9uYWxseSBhbGxvd3MgYWxsDQogICAgICAqIGNvbXBvbmVudHMgdG8gYmUgY3JlYXRlZCB3aXRo b3V0IG1ha2luZyBhIHRvcCBsZXZlbCBhcHBsaWNhdGlvbiB3aW5kb3cNCiAgICAgICogdmlzaWJs ZS4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBzcGxhc2gNCiAgICAgICogICAg ICAgICAgICB0cnVlIGlmIHdlIGFyZSBhbGxvd2VkIHRvIHNob3cgYSBzcGxhc2ggc2NyZWVuDQog ICAgICAqIEBwYXJhbSBtYWluQXBwbGljYXRpb24NCiAgICAgICogICAgICAgICAgICB0cnVlIHRv IGNyZWF0ZSBhIHRvcCBsZXZlbCBhcHBsaWNhdGlvbiwgZmFsc2UgaWYgaW50ZWdyYXRlZA0KICAg ICAgKiAgICAgICAgICAgIHdpdGggc29tZXRoaW5nIGVsc2UuDQogICAgICAqIEBwYXJhbSBsZWZ0 Qm90dG9tUGFuZSBwYW5lbCB0byBwbGFjZSBpbiB0aGUgYm90dG9tIGxlZnQgY29ybmVyIG9mIHRo ZSBHVUkNCi0gICAgICogDQorICAgICAqDQogICAgICAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBp bnN0YW5jZSBvZiB0aGUgcHJvamVjdGJyb3dzZXINCiAgICAgICovDQogICAgIHB1YmxpYyBzdGF0 aWMgUHJvamVjdEJyb3dzZXIgbWFrZUluc3RhbmNlKFNwbGFzaFNjcmVlbiBzcGxhc2gsDQogICAg ICAgICAgICAgYm9vbGVhbiBtYWluQXBwbGljYXRpb24sIEpQYW5lbCBsZWZ0Qm90dG9tUGFuZSkg ew0KLSAgICAgICAgcmV0dXJuIG5ldyBQcm9qZWN0QnJvd3NlcigiQXJnb1VNTCIsIHNwbGFzaCwg DQorICAgICAgICByZXR1cm4gbmV3IFByb2plY3RCcm93c2VyKCJBcmdvVU1MIiwgc3BsYXNoLA0K ICAgICAgICAgICAgICAgICBtYWluQXBwbGljYXRpb24sIGxlZnRCb3R0b21QYW5lKTsNCiAgICAg fQ0KIA0KQEAgLTQyNSw3ICs0MjYsNyBAQA0KICAgICAgICAgICAgIHNwbGFzaC5nZXRTdGF0dXNC YXIoKS5zaG93UHJvZ3Jlc3MoMTApOw0KICAgICAgICAgICAgIHNwbGFzaC5zZXRWaXNpYmxlKHRy dWUpOw0KICAgICAgICAgfQ0KLSAgICAgICAgDQorDQogICAgICAgICBlZGl0b3JQYW5lID0gbmV3 IE11bHRpRWRpdG9yUGFuZSgpOw0KICAgICAgICAgaWYgKHNwbGFzaCAhPSBudWxsKSB7DQogICAg ICAgICAgICAgc3BsYXNoLmdldFN0YXR1c0JhcigpLnNob3dTdGF0dXMoDQpAQCAtNDYwLDEyICs0 NjEsMTIgQEANCiAgICAgICAgIC8vIFRoZXJlIGFyZSB2YXJpb3VzIGRldGFpbHMgcGFuZXMgYWxs IG9mIHdoaWNoIGNvdWxkIGhvbGQNCiAgICAgICAgIC8vIGRpZmZlcmVudCB0YWJzIHBhZ2VzIGFj Y29yZGluZyB0byB1c2VycyBzZXR0aW5ncy4NCiAgICAgICAgIC8vIFBsYWNlIGVhY2ggcGFuZSBp biB0aGUgcmVxdWlyZWQgYm9yZGVyIGFyZWEuDQotICAgICAgICBmb3IgKE1hcC5FbnRyeTxQb3Np dGlvbiwgRGV0YWlsc1BhbmU+IGVudHJ5IA0KKyAgICAgICAgZm9yIChNYXAuRW50cnk8UG9zaXRp b24sIERldGFpbHNQYW5lPiBlbnRyeQ0KICAgICAgICAgICAgICAgICA6IGRldGFpbHNQYW5lc0J5 Q29tcGFzc1BvaW50LmVudHJ5U2V0KCkpIHsNCiAgICAgICAgICAgICBQb3NpdGlvbiBwb3NpdGlv biA9IGVudHJ5LmdldEtleSgpOw0KICAgICAgICAgICAgIGFkZFBhbmVsKGVudHJ5LmdldFZhbHVl KCksIHBvc2l0aW9uKTsNCiAgICAgICAgIH0NCi0gICAgICAgIA0KKw0KICAgICAgICAgLy8gVG9v bGJhciBib3VuZGFyeSBpcyB0aGUgYXJlYSBiZXR3ZWVuIHRoZSBtZW51IGFuZCB0aGUgc3RhdHVz DQogICAgICAgICAvLyBiYXIuIEl0IGNvbnRhaW5zIHRoZSB3b3JrYXJlYSBhdCBjZW50cmUgYW5k IHRoZSB0b29sYmFyDQogICAgICAgICAvLyBwb3NpdGlvbiBub3J0aCwgc291dGgsIGVhc3Qgb3Ig d2VzdC4NCkBAIC01OTQsNyArNTk1LDcgQEANCiAgICAgICAgIH0NCiAgICAgfQ0KIA0KLSAgICAN CisNCiAgICAgLyoqDQogICAgICAqIEFkZCBhIHBhbmVsIHRvIGEgc3BsaXQgcGFuZSBhcmVhLg0K ICAgICAgKg0KQEAgLTY2OSwxNCArNjcwLDE0IEBADQogICAgIHByaXZhdGUgaW50IGdldFNhdmVk SGVpZ2h0KENvbmZpZ3VyYXRpb25LZXkgaGVpZ2h0KSB7DQogICAgICAgICByZXR1cm4gQ29uZmln dXJhdGlvbi5nZXRJbnRlZ2VyKGhlaWdodCwgREVGQVVMVF9DT01QT05FTlRIRUlHSFQpOw0KICAg ICB9DQotICAgIA0KKw0KICAgICAvKioNCiAgICAgICogSGFuZGxlIHRoZSB0aXRsZS1iYXIgb2Yg dGhlIHdpbmRvdy4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBhdXRob3IgbWljaGllbA0K ICAgICAgKi8NCiAgICAgcHJpdmF0ZSBjbGFzcyBUaXRsZUhhbmRsZXIgaW1wbGVtZW50cyBQcm9w ZXJ0eUNoYW5nZUxpc3RlbmVyIHsNCi0gICAgICAgIA0KKw0KICAgICAgICAgcHJpdmF0ZSBBcmdv RGlhZ3JhbSBtb25pdG9yZWREaWFncmFtID0gbnVsbDsNCiANCiAgICAgICAgIC8qKg0KQEAgLTY4 NSw3ICs2ODYsNyBAQA0KICAgICAgICAgICogQHBhcmFtIHByb2plY3RGaWxlTmFtZSB0aGUgcHJv amVjdC1maWxlIG5hbWUNCiAgICAgICAgICAqIEBwYXJhbSBhY3RpdmVEaWFncmFtIHRoZSAobmV3 KSBjdXJyZW50IGRpYWdyYW0NCiAgICAgICAgICAqLw0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQg YnVpbGRUaXRsZShTdHJpbmcgcHJvamVjdEZpbGVOYW1lLCANCisgICAgICAgIHByb3RlY3RlZCB2 b2lkIGJ1aWxkVGl0bGUoU3RyaW5nIHByb2plY3RGaWxlTmFtZSwNCiAgICAgICAgICAgICAgICAg QXJnb0RpYWdyYW0gYWN0aXZlRGlhZ3JhbSkgew0KICAgICAgICAgICAgIGlmIChwcm9qZWN0Rmls ZU5hbWUgPT0gbnVsbCB8fCAiIi5lcXVhbHMocHJvamVjdEZpbGVOYW1lKSkgew0KICAgICAgICAg ICAgICAgICBpZiAoUHJvamVjdE1hbmFnZXIuZ2V0TWFuYWdlcigpLmdldEN1cnJlbnRQcm9qZWN0 KCkgIT0gbnVsbCkgew0KQEAgLTcxMSwxMSArNzEyLDExIEBADQogICAgICAgICAgICAgICAgICAg ICAgICAgKyBhY3RpdmVEaWFncmFtLmdldE5hbWUoKSArICIgLSAiICsgZ2V0QXBwTmFtZSgpDQog ICAgICAgICAgICAgICAgICAgICAgICAgKyBjaGFuZ2VJbmRpY2F0b3IpOw0KICAgICAgICAgICAg IH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHNldFRpdGxlSW50ZXJuYWwocHJvamVjdEZpbGVO YW1lICsgIiAtICIgKyBnZXRBcHBOYW1lKCkgDQorICAgICAgICAgICAgICAgIHNldFRpdGxlSW50 ZXJuYWwocHJvamVjdEZpbGVOYW1lICsgIiAtICIgKyBnZXRBcHBOYW1lKCkNCiAgICAgICAgICAg ICAgICAgICAgICAgICArIGNoYW5nZUluZGljYXRvcik7DQogICAgICAgICAgICAgfQ0KICAgICAg ICAgfQ0KLSAgICAgICAgDQorDQogICAgICAgICBwcml2YXRlIHZvaWQgc2V0VGl0bGVJbnRlcm5h bChmaW5hbCBTdHJpbmcgdGl0bGUpIHsNCiAgICAgICAgICAgICBpZiAoU3dpbmdVdGlsaXRpZXMu aXNFdmVudERpc3BhdGNoVGhyZWFkKCkpIHsNCiAgICAgICAgICAgICAgICAgc2V0VGl0bGUodGl0 bGUpOw0KQEAgLTcyNyw3ICs3MjgsNyBAQA0KICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAg ICAgICB9DQogICAgICAgICB9DQotICAgICAgICANCisNCiAgICAgICAgIC8qDQogICAgICAgICAg KiBAc2VlIGphdmEuYmVhbnMuUHJvcGVydHlDaGFuZ2VMaXN0ZW5lciNwcm9wZXJ0eUNoYW5nZShq YXZhLmJlYW5zLlByb3BlcnR5Q2hhbmdlRXZlbnQpDQogICAgICAgICAgKi8NCkBAIC03MzUsOSAr NzM2LDkgQEANCiAgICAgICAgICAgICBpZiAoZXZ0LmdldFByb3BlcnR5TmFtZSgpLmVxdWFscygi bmFtZSIpDQogICAgICAgICAgICAgICAgICAgICAmJiBldnQuZ2V0U291cmNlKCkgaW5zdGFuY2Vv ZiBBcmdvRGlhZ3JhbSkgew0KICAgICAgICAgICAgICAgICBidWlsZFRpdGxlKA0KLSAgICAgICAg ICAgICAgICAgICAgUHJvamVjdE1hbmFnZXIuZ2V0TWFuYWdlcigpLmdldEN1cnJlbnRQcm9qZWN0 KCkuZ2V0TmFtZSgpLCANCisgICAgICAgICAgICAgICAgICAgIFByb2plY3RNYW5hZ2VyLmdldE1h bmFnZXIoKS5nZXRDdXJyZW50UHJvamVjdCgpLmdldE5hbWUoKSwNCiAgICAgICAgICAgICAgICAg ICAgIChBcmdvRGlhZ3JhbSkgZXZ0LmdldFNvdXJjZSgpKTsNCi0gICAgICAgICAgICB9ICAgICAg ICAgICAgDQorICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KICAgICB9DQogICAgIC8qKg0KQEAg LTc4Miw3ICs3ODMsNyBAQA0KIA0KICAgICAvKioNCiAgICAgICogU2VsZWN0IHRoZSB0YWIgcGFn ZSBjb250YWluaW5nIHRoZSB0b2RvIGl0ZW0uDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBA cGFyYW0gbyB0aGUgdG9kbyBpdGVtIHRvIHNlbGVjdA0KICAgICAgKiBAZGVwcmVjYXRlZCBmb3Ig MC4yNS41IGJ5IHRmbW9ycmlzLiBTZW5kIGFuIGV2ZW50IHRoYXQgdGhlDQogICAgICAqICAgICAg ICAgICAgIERldGFpbHNQYW5lL1RhYlRvRG8gd2lsbCBiZSBsaXN0ZW5pbmcgZm9yLg0KQEAgLTgw MSw3ICs4MDIsNyBAQA0KIA0KICAgICAvKioNCiAgICAgICogR2V0IHRoZSB0YWIgcGFnZSBpbnN0 YW5jZSBvZiB0aGUgZ2l2ZW4gY2xhc3MuDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAcGFy YW0gdGFiQ2xhc3MgdGhlIGdpdmVuIGNsYXNzDQogICAgICAqIEByZXR1cm4gdGhlIHRhYnBhZ2UN CiAgICAgICogQGRlcHJlY2F0ZWQgYnkgZm9yIDAuMjUuNSBieSB0Zm1vcnJpcy4gVGFicyBzaG91 bGQgcmVnaXN0ZXIgdGhlbXNlbHZlcw0KQEAgLTg1Myw3ICs4NTQsNyBAQA0KICAgICBwdWJsaWMg TmF2aWdhdG9yUGFuZSBnZXRFeHBsb3JlclBhbmUoKSB7DQogICAgICAgICByZXR1cm4gZXhwbG9y ZXJQYW5lOw0KICAgICB9DQotICAgIA0KKw0KICAgICAvKioNCiAgICAgICogQHJldHVybiB0aGUg ZGV0YWlscyBwYW5lDQogICAgICAqLw0KQEAgLTkyMyw3ICs5MjQsNyBAQA0KICAgICAgICAgICAg IENvbmZpZ3VyYXRpb24uc2V0SW50ZWdlcihBcmdvLktFWV9TQ1JFRU5fTEVGVF9YLCBnZXRYKCkp Ow0KICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24uc2V0SW50ZWdlcihBcmdvLktFWV9TQ1JFRU5f VE9QX1ksIGdldFkoKSk7DQogICAgICAgICB9DQotICAgICAgICBDb25maWd1cmF0aW9uLnNldEJv b2xlYW4oQXJnby5LRVlfU0NSRUVOX01BWElNSVpFRCwgDQorICAgICAgICBDb25maWd1cmF0aW9u LnNldEJvb2xlYW4oQXJnby5LRVlfU0NSRUVOX01BWElNSVpFRCwNCiAgICAgICAgICAgICAgICAg bWF4aW1pemVkKTsNCiAgICAgfQ0KIA0KQEAgLTk1MSw5ICs5NTIsOSBAQA0KICAgICAgKiBzYXZl IGFuZCBleGl0LCBleGl0IHdpdGhvdXQgc2F2aW5nIG9yIGNhbmNlbCB0aGUgZXhpdCBvcGVyYXRp b24uDQogICAgICAqLw0KICAgICBwdWJsaWMgYm9vbGVhbiB0cnlFeGl0KCkgew0KLSAgICAgICAg TE9HLmluZm8oIlRyeWluZyB0byBleGl0IHRoZSBhcHBsaWNhdGlvbiIpOw0KKyAgICAgICAgTE9H LmxvZyhMZXZlbC5JTkZPLCAiVHJ5aW5nIHRvIGV4aXQgdGhlIGFwcGxpY2F0aW9uIik7DQogICAg ICAgICBpZiAoc2F2ZUFjdGlvbiAhPSBudWxsICYmIHNhdmVBY3Rpb24uaXNFbmFibGVkKCkpIHsN Ci0gICAgICAgICAgICBMT0cuaW5mbygiQSBzYXZlIGlzIG5lZWRlZCAtIHByb21wdGluZyB0aGUg dXNlciIpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywgIkEgc2F2ZSBpcyBuZWVk ZWQgLSBwcm9tcHRpbmcgdGhlIHVzZXIiKTsNCiAgICAgICAgICAgICBQcm9qZWN0IHAgPSBQcm9q ZWN0TWFuYWdlci5nZXRNYW5hZ2VyKCkuZ2V0Q3VycmVudFByb2plY3QoKTsNCiANCiAgICAgICAg ICAgICBTdHJpbmcgdCA9DQpAQCAtOTY4LDIzICs5NjksMjMgQEANCiAgICAgICAgICAgICAgICAg Ly8gVGhlIHRyeVNhdmUgbWV0aG9kIHJlc3VsdHMgaW4gdGhlIHNhdmUgdGFraW5nIHBsYWNlIGlu IGFub3RoZXIgdGhyZWFkLg0KICAgICAgICAgICAgICAgICAvLyBJZiB0aGF0IGNvbXBsZXRlcyB3 aXRob3V0IGVycm9yIHRoZSBQcm9qZWN0QnJvd3Nlci5leGl0KCkgbWV0aG9kIHdpbGwNCiAgICAg ICAgICAgICAgICAgLy8gYmUgY2FsbGVkIHdoaWNoIHdpbGwgYWN0dWFsbHkgZXhpc3QgdGhlIHN5 c3RlbS4NCi0gICAgICAgICAgICAgICAgTE9HLmluZm8oIlRoZSB1c2VyIGNob3NlIHRvIGV4aXQg YW5kIHNhdmUiKTsNCisgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLCAiVGhlIHVz ZXIgY2hvc2UgdG8gZXhpdCBhbmQgc2F2ZSIpOw0KICAgICAgICAgICAgICAgICB0cnlTYXZlKFBy b2plY3RNYW5hZ2VyLmdldE1hbmFnZXIoKS5nZXRDdXJyZW50UHJvamVjdCgpICE9IG51bGwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAmJiBQcm9qZWN0TWFuYWdlci5nZXRNYW5hZ2VyKCkuZ2V0 Q3VycmVudFByb2plY3QoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFVS SSgpICE9IG51bGwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgdHJ1 ZSk7DQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICB9IGVsc2Ug aWYgKHJlc3BvbnNlID09IEpPcHRpb25QYW5lLkNBTkNFTF9PUFRJT04pIHsNCi0gICAgICAgICAg ICAgICAgTE9HLmluZm8oIlRoZSB1c2VyIGNhbmNlbGxlZCB0aGUgc2F2ZSBkaWFsb2ciKTsNCisg ICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLCAiVGhlIHVzZXIgY2FuY2VsbGVkIHRo ZSBzYXZlIGRpYWxvZyIpOw0KICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAg ICAgICAgfQ0KICAgICAgICAgfQ0KLSAgICAgICAgTE9HLmluZm8oIldlIHdpbGwgbm93IGV4aXQi KTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywgIldlIHdpbGwgbm93IGV4aXQiKTsNCiAg ICAgICAgIGV4aXQoKTsNCiAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICB9DQotICAgIA0KLSAg ICANCisNCisNCiAgICAgLyoqDQogICAgICAqIEV4aXQgdGhlIGFwcGxpY2F0aW9uIHNhdmluZyB0 aGUgY3VycmVudCB1c2VyIHNldHRpbmdzLg0KICAgICAgKi8NCkBAIC0xMDE1LDcgKzEwMTYsOSBA QA0KICAgICAgICAgICogQHNlZSBqYXZhLmF3dC5ldmVudC5XaW5kb3dMaXN0ZW5lciN3aW5kb3dD bG9zaW5nKGphdmEuYXd0LmV2ZW50LldpbmRvd0V2ZW50KQ0KICAgICAgICAgICovDQogICAgICAg ICBwdWJsaWMgdm9pZCB3aW5kb3dDbG9zaW5nKFdpbmRvd0V2ZW50IGUpIHsNCi0gICAgICAgICAg ICBMT0cuaW5mbygiRGV0ZWN0ZWQgYXR0ZW1wdCB0byBjbG9zZSBhcHBsaWNhdGlvbiAtIGNoZWNr aW5nIGlmIHNhdmUgbmVlZGVkIik7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLA0K KyAgICAgICAgICAgICAgICAgICAgIkRldGVjdGVkIGF0dGVtcHQgdG8gY2xvc2UgYXBwbGljYXRp b24gLSAiDQorICAgICAgICAgICAgICAgICAgICArICJjaGVja2luZyBpZiBzYXZlIG5lZWRlZCIp Ow0KICAgICAgICAgICAgIHRyeUV4aXQoKTsNCiAgICAgICAgIH0NCiAgICAgfSAvKiBlbmQgY2xh c3MgV2luZG93Q2xvc2VyICovDQpAQCAtMTA2Niw3ICsxMDY5LDcgQEANCiAgICAgcHVibGljIHZv aWQgdGFyZ2V0U2V0KFRhcmdldEV2ZW50IGUpIHsNCiAgICAgCXRhcmdldENoYW5nZWQoZS5nZXRO ZXdUYXJnZXQoKSk7DQogICAgIH0NCi0gICAgDQorDQogICAgIC8qKg0KICAgICAgKiBDYWxsZWQg dG8gdXBkYXRlIHRoZSBjdXJyZW50IG5hbWVzcGFjZSBhbmQgYWN0aXZlIGRpYWdyYW0gYWZ0ZXIN CiAgICAgICogdGhlIHRhcmdldCBoYXMgY2hhbmdlZC4NCkBAIC0xMDc4LDkgKzEwODEsOSBAQA0K ICAgICAgICAgICAgIHRpdGxlSGFuZGxlci5idWlsZFRpdGxlKG51bGwsIChBcmdvRGlhZ3JhbSkg dGFyZ2V0KTsNCiAgICAgICAgIH0NCiAgICAgICAgIGRldGVybWluZVJlbW92ZUVuYWJsZWQoKTsN Ci0gICAgICAgIA0KKw0KICAgICAgICAgUHJvamVjdCBwID0gUHJvamVjdE1hbmFnZXIuZ2V0TWFu YWdlcigpLmdldEN1cnJlbnRQcm9qZWN0KCk7DQotICAgICAgICANCisNCiAgICAgICAgIE9iamVj dCB0aGVDdXJyZW50TmFtZXNwYWNlID0gbnVsbDsNCiAgICAgICAgIHRhcmdldCA9IFRhcmdldE1h bmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRUYXJnZXQoKTsNCiAgICAgICAgIGlmICh0YXJnZXQgaW5z dGFuY2VvZiBBcmdvRGlhZ3JhbSkgew0KQEAgLTExMjksNyArMTEzMiw3IEBADQogICAgIHB1Ymxp YyBGb250IGdldERlZmF1bHRGb250KCkgew0KICAgICAgICAgcmV0dXJuIGRlZmF1bHRGb250Ow0K ICAgICB9DQotICAgIA0KKw0KICAgICAvKioNCiAgICAgICogVHJ5IHRvIHNhdmUgdGhlIHByb2pl Y3QsIHBvc3NpYmx5IG5vdCBjcmVhdGluZyBhIG5ldyBmaWxlDQogICAgICAqIEBwYXJhbSBvdmVy d3JpdGUgaWYgdHJ1ZSwgdGhlbiB3ZSBvdmVyd3JpdGUgd2l0aG91dCBhc2tpbmcNCkBAIC0xMTM3 LDE3ICsxMTQwLDE3IEBADQogICAgIHB1YmxpYyB2b2lkIHRyeVNhdmUoYm9vbGVhbiBvdmVyd3Jp dGUpIHsNCiAgICAgICAgIHRoaXMudHJ5U2F2ZShvdmVyd3JpdGUsIGZhbHNlKTsNCiAgICAgfQ0K LSAgICANCisNCiAgICAgLyoqDQogICAgICAqIFRyeSB0byBzYXZlIHRoZSBwcm9qZWN0Lg0KICAg ICAgKiBAcGFyYW0gb3ZlcndyaXRlIGlmIHRydWUsIHRoZW4gd2Ugb3ZlcndyaXRlIHdpdGhvdXQg YXNraW5nDQogICAgICAqIEBwYXJhbSBzYXZlTmV3RmlsZSBpZiB0cnVlLCB3ZSdsbCBhc2sgZm9y IGEgbmV3IGZpbGUgZXZlbiBpZg0KLSAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhlIGN1cnJl bnQgcHJvamVjdCBhbHJlYWR5IGhhZCBvbmUgIA0KLSAgICAgKi8gICAgICAgIA0KKyAgICAgKiAg ICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgcHJvamVjdCBhbHJlYWR5IGhhZCBvbmUNCisg ICAgICovDQogICAgIHB1YmxpYyB2b2lkIHRyeVNhdmUoYm9vbGVhbiBvdmVyd3JpdGUsIGJvb2xl YW4gc2F2ZU5ld0ZpbGUpIHsNCiAgICAgICAgIHRyeVNhdmUob3ZlcndyaXRlLCBzYXZlTmV3Rmls ZSwgZmFsc2UpOw0KICAgICB9DQotICAgIA0KKw0KICAgICAvKioNCiAgICAgICogVHJ5IHRvIHNh dmUgdGhlIHByb2plY3QuDQogICAgICAqIEBwYXJhbSBvdmVyd3JpdGUgaWYgdHJ1ZSwgdGhlbiB3 ZSBvdmVyd3JpdGUgd2l0aG91dCBhc2tpbmcNCkBAIC0xMTU1LDcgKzExNTgsNyBAQA0KICAgICAg KiAgICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgcHJvamVjdCBhbHJlYWR5IGhhZCBvbmUN CiAgICAgICogQHBhcmFtIGV4aXRBZnRlclNhdmUgVGhlIGFwcGxpY2F0aW9uIHdpbGwgZXhpdCB3 aGVuIHRoZSBzYXZlIGhhcw0KICAgICAgKiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5DQotICAgICAq LyAgICAgICAgDQorICAgICAqLw0KICAgICBwdWJsaWMgdm9pZCB0cnlTYXZlKA0KICAgICAgICAg ICAgIGZpbmFsIGJvb2xlYW4gb3ZlcndyaXRlLA0KICAgICAgICAgICAgIGJvb2xlYW4gc2F2ZU5l d0ZpbGUsDQpAQCAtMTE3MSw3ICsxMTc0LDcgQEANCiANCiAgICAgICAgICAgICAvLyBkb2VzIHRo ZSBmaWxlIHJlYWxseSBleGlzdHM/DQogICAgICAgICAgICAgaWYgKCFmaWxlLmV4aXN0cygpKSB7 DQotICAgICAgICAgICAgICAgIExPRy53YXJuKCJQcm9qZWN0IGZpbGUgbm90IGZvdW5kIC0gVVJJ OiAiICsgdXJpKTsNCisgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5XQVJOSU5HLCAiUHJv amVjdCBmaWxlIG5vdCBmb3VuZCAtIFVSSTogIiArIHVyaSk7DQogICAgICAgICAgICAgICAgIC8v IHByb2plY3QgZmlsZSBkb2Vzbid0IGV4aXN0LiBsZXQncyBwb3AgdXAgYSBtZXNzYWdlIGRpYWxv Zy4uDQogICAgICAgICAgICAgICAgIGludCByZXNwb25zZSA9IEpPcHRpb25QYW5lLnNob3dDb25m aXJtRGlhbG9nKA0KICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsDQpAQCAtMTIwOSw3ICsx MjEyLDcgQEANCiAgICAgICAgIC8vIGxldCdzIGNhbGwgdGhlIHJlYWwgc2F2ZSBtZXRob2QNCiAg ICAgICAgIHRyeVNhdmVXaXRoUHJvZ3Jlc3NNb25pdG9yKG92ZXJ3cml0ZSwgZmlsZSwgZXhpdEFm dGVyU2F2ZSk7DQogICAgIH0NCi0gICAgDQorDQogICAgIC8qKg0KICAgICAgKiBDaGVja3MgaWYg dGhlIGdpdmVuIGZpbGUgaXMgd3JpdGFibGUgb3IgcmVhZC1vbmx5DQogICAgICAqIEBwYXJhbSBm aWxlIHRoZSBmaWxlIHRvIGJlIGNoZWNrZWQNCkBAIC0xMjE3LDIxICsxMjIwLDIxIEBADQogICAg ICAqLw0KICAgICBwcml2YXRlIGJvb2xlYW4gaXNGaWxlUmVhZG9ubHkoRmlsZSBmaWxlKSB7DQog ICAgICAgICB0cnkgew0KLSAgICAgICAgICAgIHJldHVybiAoZmlsZSA9PSBudWxsKSANCi0gICAg ICAgICAgICAgICAgfHwgKGZpbGUuZXhpc3RzKCkgJiYgIWZpbGUuY2FuV3JpdGUoKSkgDQorICAg ICAgICAgICAgcmV0dXJuIChmaWxlID09IG51bGwpDQorICAgICAgICAgICAgICAgIHx8IChmaWxl LmV4aXN0cygpICYmICFmaWxlLmNhbldyaXRlKCkpDQogICAgICAgICAgICAgICAgIHx8ICghZmls ZS5leGlzdHMoKSAmJiAhZmlsZS5jcmVhdGVOZXdGaWxlKCkpOw0KLSAgICAgICAgDQorDQogICAg ICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb0V4Yykgew0KICAgICAgICAgICAgIHJldHVybiB0 cnVlOw0KICAgICAgICAgfQ0KICAgICB9DQotICAgIA0KKw0KICAgICAvKioNCiAgICAgICogTG9h ZHMgYSBwcm9qZWN0IGRpc3BsYXlpbmcgYSBuaWNlIFByb2dyZXNzTW9uaXRvcg0KLSAgICAgKiAN CisgICAgICoNCiAgICAgICogQHBhcmFtIG92ZXJ3cml0ZSBpZiB0cnVlLCB0aGUgZmlsZSBpcyBn b2luZyB0byBiZSBvdmVyd3JpdHRlbg0KICAgICAgKiBAcGFyYW0gZmlsZSAgICAgIHRoZSB0YXJn ZXQgZmlsZQ0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogVE9ETzogU2VwYXJhdGUgdGhpcyBp bnRvIGEgU3dpbmcgc3BlY2lmaWMgY2xhc3MgLSB0Zm0NCiAgICAgICogQHBhcmFtIGV4aXQgaWYg dHJ1ZTogZXhpdCBBcmdvVU1MIHdoZW4gZG9uZQ0KICAgICAgKi8NCkBAIC0xMjQ0LDcgKzEyNDcs NyBAQA0KICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgIH0NCiAgICAgICAgIGlmICh0aGlz LmlzRmlsZVJlYWRvbmx5KGZpbGUpKSB7DQotICAgICAgICAgICAgSk9wdGlvblBhbmUuc2hvd01l c3NhZ2VEaWFsb2codGhpcywgDQorICAgICAgICAgICAgSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VE aWFsb2codGhpcywNCiAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0b3IubG9jYWxpemUoDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb25wYW5lLnNhdmUtcHJvamVjdC1yZWFk LW9ubHkiKSwNCiAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0b3IubG9jYWxpemUoDQpAQCAt MTI1Nyw0MyArMTI2MCw0MyBAQA0KICAgICAgICAgICAgICAgICBQcm9qZWN0TWFuYWdlci5nZXRN YW5hZ2VyKCkuZ2V0Q3VycmVudFByb2plY3QoKSwNCiAgICAgICAgICAgICAgICAgZmlsZSwNCiAg ICAgICAgICAgICAgICAgZXhpdCk7DQotICAgICAgICBMT0cuaW5mbygiU3RhcnRpbmcgc2F2ZSB0 aHJlYWQiKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywgIlN0YXJ0aW5nIHNhdmUgdGhy ZWFkIik7DQogICAgICAgICB3b3JrZXIuc3RhcnQoKTsNCiAgICAgfQ0KLSAgICANCisNCiAgICAg LyoqDQogICAgICAqIFJlYnVpbGQgdGhlIHRpdGxlIHVzaW5nIHRoZSBuYW1lIG9mIHRoZSBjdXJy ZW50IHByb2plY3QuDQogICAgICAqDQogICAgICAqLw0KICAgICBwdWJsaWMgdm9pZCBidWlsZFRp dGxlV2l0aEN1cnJlbnRQcm9qZWN0TmFtZSgpIHsNCiAgICAgICAgIHRpdGxlSGFuZGxlci5idWls ZFRpdGxlKA0KLSAgICAgICAgICAgICAgICBQcm9qZWN0TWFuYWdlci5nZXRNYW5hZ2VyKCkuZ2V0 Q3VycmVudFByb2plY3QoKS5nZXROYW1lKCksIA0KKyAgICAgICAgICAgICAgICBQcm9qZWN0TWFu YWdlci5nZXRNYW5hZ2VyKCkuZ2V0Q3VycmVudFByb2plY3QoKS5nZXROYW1lKCksDQogICAgICAg ICAgICAgICAgIG51bGwpOw0KICAgICB9DQotICAgIA0KKw0KICAgICAvKioNCiAgICAgICogVHJ5 IHRvIHNhdmUgdGhlIHByb2plY3QuDQogICAgICAqIEBwYXJhbSBvdmVyd3JpdGUgaWYgdHJ1ZSwg dGhlbiB3ZSBvdmVyd3JpdGUgd2l0aG91dCBhc2tpbmcNCiAgICAgICogQHBhcmFtIGZpbGUgdGhl IEZpbGUgdG8gc2F2ZSB0bw0KLSAgICAgKiBAcGFyYW0gcG13ICAgICAgIHRoZSBQcm9ncmVzc01v bml0b3IgdG8gYmUgdXBkYXRlZDsgIA0KKyAgICAgKiBAcGFyYW0gcG13ICAgICAgIHRoZSBQcm9n cmVzc01vbml0b3IgdG8gYmUgdXBkYXRlZDsNCiAgICAgICogQHJldHVybiB0cnVlIGlmIHN1Y2Nl c3NmdWwNCi0gICAgICogDQorICAgICAqDQogICAgICAqIFRPRE86IFNlcGFyYXRlIHRoaXMgaW50 byBhIFN3aW5nIHNwZWNpZmljIGNsYXNzIC0gdGZtDQogICAgICAqIEBkZXByZWNhdGVkIGluIDAu MjkuMSBieSBCb2IgVGFybGluZyB1c2UgdHJ5U2F2ZVdpdGhQcm9ncmVzc01vbml0b3INCiAgICAg ICovDQogICAgIEBEZXByZWNhdGVkDQotICAgIHB1YmxpYyBib29sZWFuIHRyeVNhdmUoYm9vbGVh biBvdmVyd3JpdGUsIA0KLSAgICAgICAgICAgIEZpbGUgZmlsZSwgDQorICAgIHB1YmxpYyBib29s ZWFuIHRyeVNhdmUoYm9vbGVhbiBvdmVyd3JpdGUsDQorICAgICAgICAgICAgRmlsZSBmaWxlLA0K ICAgICAgICAgICAgIFByb2dyZXNzTW9uaXRvciBwbXcpIHsNCi0gICAgICAgIExPRy5pbmZvKCJT YXZpbmcgdGhlIHByb2plY3QiKTsNCi0gICAgICAgIA0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5J TkZPLCAiU2F2aW5nIHRoZSBwcm9qZWN0Iik7DQorDQogICAgICAgICBpZiAoIVBlcnNpc3RlbmNl TWFuYWdlci5nZXRJbnN0YW5jZSgpLmNvbmZpcm1PdmVyd3JpdGUoDQogICAgICAgICAgICAgICAg IEFyZ29GcmFtZS5nZXRGcmFtZSgpLCBvdmVyd3JpdGUsIGZpbGUpKSB7DQogICAgICAgICAgICAg cmV0dXJuIGZhbHNlOw0KICAgICAgICAgfQ0KLSAgICAgICAgDQorDQogICAgICAgICBpZiAodGhp cy5pc0ZpbGVSZWFkb25seShmaWxlKSkgew0KLSAgICAgICAgICAgIEpPcHRpb25QYW5lLnNob3dN ZXNzYWdlRGlhbG9nKHRoaXMsIA0KKyAgICAgICAgICAgIEpPcHRpb25QYW5lLnNob3dNZXNzYWdl RGlhbG9nKHRoaXMsDQogICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdG9yLmxvY2FsaXplKA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9ucGFuZS5zYXZlLXByb2plY3QtcmVh ZC1vbmx5IiksDQogICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdG9yLmxvY2FsaXplKA0KQEAg LTEzMDksMTYgKzEzMTIsMTYgQEANCiAgICAgLyoqDQogICAgICAqIFNhdmUgdGhlIHByb2plY3Qu DQogICAgICAqIEBwYXJhbSBmaWxlIHRoZSBGaWxlIHRvIHNhdmUgdG8NCi0gICAgICogQHBhcmFt IHBtdyAgICAgICB0aGUgUHJvZ3Jlc3NNb25pdG9yIHRvIGJlIHVwZGF0ZWQ7ICANCisgICAgICog QHBhcmFtIHBtdyAgICAgICB0aGUgUHJvZ3Jlc3NNb25pdG9yIHRvIGJlIHVwZGF0ZWQ7DQogICAg ICAqIEByZXR1cm4gdHJ1ZSBpZiBzdWNjZXNzZnVsDQotICAgICAqIA0KKyAgICAgKg0KICAgICAg KiBUT0RPOiBTZXBhcmF0ZSB0aGlzIGludG8gYSBTd2luZyBzcGVjaWZpYyBjbGFzcyAtIHRmbQ0K ICAgICAgKi8NCiAgICAgYm9vbGVhbiB0cnlTYXZlKA0KLSAgICAgICAgICAgIGZpbmFsIEZpbGUg ZmlsZSwgDQorICAgICAgICAgICAgZmluYWwgRmlsZSBmaWxlLA0KICAgICAgICAgICAgIGZpbmFs IFByb2dyZXNzTW9uaXRvciBwbXcsDQogICAgICAgICAgICAgZmluYWwgUHJvamVjdCBwcm9qZWN0 KSB7DQotICAgICAgICBMT0cuaW5mbygiU2F2aW5nIHRoZSBwcm9qZWN0Iik7DQorICAgICAgICBM T0cubG9nKExldmVsLklORk8sICJTYXZpbmcgdGhlIHByb2plY3QiKTsNCiAgICAgICAgIFBlcnNp c3RlbmNlTWFuYWdlciBwbSA9IFBlcnNpc3RlbmNlTWFuYWdlci5nZXRJbnN0YW5jZSgpOw0KICAg ICAgICAgUHJvamVjdEZpbGVQZXJzaXN0ZXIgcGVyc2lzdGVyID0gbnVsbDsNCiANCkBAIC0xMzQ1 LDI5ICsxMzQ4LDI5IEBADQogICAgICAgICAgICAgU3RyaW5nIHJlcG9ydCA9IHByb2plY3QucmVw YWlyKCk7DQogICAgICAgICAgICAgaWYgKHJlcG9ydC5sZW5ndGgoKSA+IDApIHsNCiAgICAgICAg ICAgICAgICAgLy8gVE9ETzogaTE4bg0KLSAgICAgICAgICAgICAgICByZXBvcnQgPSANCisgICAg ICAgICAgICAgICAgcmVwb3J0ID0NCiAgICAgICAgICAgICAgICAgICAgICJBbiBpbmNvbnNpc3Rl bmN5IGhhcyBiZWVuIGRldGVjdGVkIHdoZW4gc2F2aW5nIHRoZSBtb2RlbC4iDQogICAgICAgICAg ICAgICAgICAgICAgICAgKyAiVGhlc2UgaGF2ZSBiZWVuIHJlcGFpcmVkIGFuZCBhcmUgcmVwb3J0 ZWQgYmVsb3cuICINCiAgICAgICAgICAgICAgICAgICAgICAgICArICJUaGUgc2F2ZSB3aWxsIGNv bnRpbnVlIHdpdGggdGhlIG1vZGVsIGhhdmluZyBiZWVuICINCiAgICAgICAgICAgICAgICAgICAg ICAgICArICJhbWVuZGVkIGFzIGRlc2NyaWJlZC5cbiIgKyByZXBvcnQ7DQogICAgICAgICAgICAg ICAgIHJlcG9ydEVycm9yKA0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBtdywgDQorICAgICAg ICAgICAgICAgICAgICAgICAgcG13LA0KICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0 b3IubG9jYWxpemUoImRpYWxvZy5yZXBhaXIiKSArIHJlcG9ydCwgdHJ1ZSk7DQogICAgICAgICAg ICAgfQ0KLSAgICAgICAgICAgIA0KKw0KICAgICAgICAgICAgIGlmIChwbXcgIT0gbnVsbCkgew0K ICAgICAgICAgICAgICAgICBwbXcudXBkYXRlUHJvZ3Jlc3MoMjUpOw0KICAgICAgICAgICAgICAg ICBwZXJzaXN0ZXIuYWRkUHJvZ3Jlc3NMaXN0ZW5lcihwbXcpOw0KICAgICAgICAgICAgIH0NCi0g ICAgICAgICAgICANCisNCiAgICAgICAgICAgICBwcm9qZWN0LnByZVNhdmUoKTsNCiAgICAgICAg ICAgICBwZXJzaXN0ZXIuc2F2ZShwcm9qZWN0LCBmaWxlKTsNCiAgICAgICAgICAgICBwcm9qZWN0 LnBvc3RTYXZlKCk7DQogDQogICAgICAgICAgICAgQXJnb0V2ZW50UHVtcC5maXJlRXZlbnQobmV3 IEFyZ29TdGF0dXNFdmVudCgNCi0gICAgICAgICAgICAgICAgICAgIEFyZ29FdmVudFR5cGVzLlNU QVRVU19QUk9KRUNUX1NBVkVELCB0aGlzLCANCisgICAgICAgICAgICAgICAgICAgIEFyZ29FdmVu dFR5cGVzLlNUQVRVU19QUk9KRUNUX1NBVkVELCB0aGlzLA0KICAgICAgICAgICAgICAgICAgICAg ZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSkpOw0KLSAgICAgICAgICAgIExPRy5kZWJ1ZyAoInNldHRp bmcgbW9zdCByZWNlbnQgcHJvamVjdCBmaWxlIHRvICINCisgICAgICAgICAgICBMT0cuZmluZSAo InNldHRpbmcgbW9zdCByZWNlbnQgcHJvamVjdCBmaWxlIHRvICINCiAgICAgICAgICAgICAgICAg ICAgKyBmaWxlLmdldENhbm9uaWNhbFBhdGgoKSk7DQogDQogICAgICAgICAgICAgLyoNCkBAIC0x MzgxLDcgKzEzODQsNyBAQA0KICAgICAgICAgICAgICAgICAvLyB0aGF0IGNhbiBuZXZlciBiZSBu dWxsDQogICAgICAgICAgICAgICAgIHNhdmVBY3Rpb24uc2V0RW5hYmxlZChmYWxzZSk7DQogICAg ICAgICAgICAgfQ0KLSAgICAgICAgICAgIA0KKw0KICAgICAgICAgICAgIGFkZEZpbGVTYXZlZChm aWxlKTsNCiANCiAgICAgICAgICAgICBDb25maWd1cmF0aW9uLnNldFN0cmluZyhBcmdvLktFWV9N T1NUX1JFQ0VOVF9QUk9KRUNUX0ZJTEUsDQpAQCAtMTQwNiw3ICsxNDA5LDcgQEANCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHtmaWxlLmdldE5hbWUoKX0pLA0KICAg ICAgICAgICAgICAgICAgICAgdHJ1ZSwgZXgpOw0KIA0KLSAgICAgICAgICAgIExPRy5lcnJvcihz TWVzc2FnZSwgZXgpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLHNNZXNzYWdl LCBleCk7DQogICAgICAgICB9DQogDQogICAgICAgICByZXR1cm4gZmFsc2U7DQpAQCAtMTQyNSw3 ICsxNDI4LDcgQEANCiAgICAgICAgICAgICAvLyBBIEZpZyB3aXRoIGEgbnVsbCBvd25lcg0KICAg ICAgICAgICAgIGlmIChmaWdzLnNpemUoKSA+IDApIHsNCiAgICAgICAgICAgICAgICAgRmlnIGZp ZyA9IChGaWcpIGZpZ3MuZ2V0KDApOw0KLSAgICAgICAgICAgICAgICBMT0cuZXJyb3IoIlNldHRp bmcgb3duZXIgb2YgIiANCisgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsICJT ZXR0aW5nIG93bmVyIG9mICINCiAgICAgICAgICAgICAgICAgICAgICAgICArIGZpZy5nZXRDbGFz cygpLmdldE5hbWUoKSArICIgdG8gbnVsbCIpOw0KICAgICAgICAgICAgICAgICBmaWcuc2V0T3du ZXIobnVsbCk7DQogICAgICAgICAgICAgfQ0KQEAgLTE0OTksMTAgKzE1MDIsMTAgQEANCiANCiAg ICAgLyoqDQogICAgICAqIExvYWRzIGEgcHJvamVjdCBkaXNwbGF5aW5nIGEgbmljZSBQcm9ncmVz c01vbml0b3INCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBmaWxlICAgICAgdGhl IHByb2plY3QgdG8gYmUgb3BlbmVkDQogICAgICAqIEBwYXJhbSBzaG93VUkgICAgd2hldGhlciB0 byBzaG93IHRoZSBHVUkgb3Igbm90DQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBUT0RPOiBU aGlzIG5lZWRzIHRvIGJlIHJlZmFjdG9yZWQgdG8gYmUgR1VJIGluZGVwZW5kZW50IC0gdGZtDQog ICAgICAqLw0KICAgICBwdWJsaWMgdm9pZCBsb2FkUHJvamVjdFdpdGhQcm9ncmVzc01vbml0b3Io RmlsZSBmaWxlLCBib29sZWFuIHNob3dVSSkgew0KQEAgLTE1MTgsMTcgKzE1MjEsMTcgQEANCiAg ICAgICogQHBhcmFtIGZpbGUgdGhlIGZpbGUgdG8gb3Blbi4NCiAgICAgICogQHBhcmFtIHNob3dV SSB0cnVlIGlmIGFuIGVycm9yIG1lc3NhZ2UgbWF5IGJlIHNob3duIHRvIHRoZSB1c2VyLA0KICAg ICAgKiAgICAgICAgICAgICAgIGZhbHNlIGlmIHJ1biBpbiBjb21tYW5kbGluZSBtb2RlDQotICAg ICAqIEBwYXJhbSBwbXcgICAgICAgdGhlIFByb2dyZXNzTW9uaXRvciB0byBiZSB1cGRhdGVkOyAg DQotICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmVlZGVkLCB1c2UgbnVs bCANCisgICAgICogQHBhcmFtIHBtdyAgICAgICB0aGUgUHJvZ3Jlc3NNb25pdG9yIHRvIGJlIHVw ZGF0ZWQ7DQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmVlZGVkLCB1 c2UgbnVsbA0KICAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGZpbGUgd2FzIHN1Y2Nlc3NmdWxs eSBvcGVuZWQNCi0gICAgICogDQorICAgICAqDQogICAgICAqIFRPRE86IFNlcGFyYXRlIHRoaXMg aW50byBhIFN3aW5nIHNwZWNpZmljIGNsYXNzIC0gdGZtDQogICAgICAqLw0KLSAgICBwdWJsaWMg Ym9vbGVhbiBsb2FkUHJvamVjdChGaWxlIGZpbGUsIGJvb2xlYW4gc2hvd1VJLCANCisgICAgcHVi bGljIGJvb2xlYW4gbG9hZFByb2plY3QoRmlsZSBmaWxlLCBib29sZWFuIHNob3dVSSwNCiAgICAg ICAgICAgICBQcm9ncmVzc01vbml0b3IgcG13KSB7DQogICAgICAgICByZXR1cm4gKGxvYWRQcm9q ZWN0MihmaWxlLCBzaG93VUksIHBtdykgIT0gbnVsbCk7DQogICAgIH0NCi0gICAgDQorDQogICAg IC8qKg0KICAgICAgKiBMb2FkcyB0aGUgcHJvamVjdCBmaWxlIGFuZCBvcGVucyBhbGwga2luZHMg b2YgZXJyb3IgbWVzc2FnZSB3aW5kb3dzDQogICAgICAqIGlmIGl0IGRvZXNuJ3Qgd29yayBmb3Ig c29tZSByZWFzb24uIEluIHRob3NlIGNhc2VzIGl0IHByZXNlcnZlcw0KQEAgLTE1MzcsMTYgKzE1 NDAsMTYgQEANCiAgICAgICogQHBhcmFtIGZpbGUgdGhlIGZpbGUgdG8gb3Blbi4NCiAgICAgICog QHBhcmFtIHNob3dVSSB0cnVlIGlmIGFuIGVycm9yIG1lc3NhZ2UgbWF5IGJlIHNob3duIHRvIHRo ZSB1c2VyLA0KICAgICAgKiAgICAgICAgICAgICAgIGZhbHNlIGlmIHJ1biBpbiBjb21tYW5kbGlu ZSBtb2RlDQotICAgICAqIEBwYXJhbSBwbXcgCXRoZSBQcm9ncmVzc01vbml0b3IgdG8gYmUgdXBk YXRlZDsgIA0KLSAgICAgKiAJCQkJaWYgbm90IG5lZWRlZCwgdXNlIG51bGwgDQorICAgICAqIEBw YXJhbSBwbXcgCXRoZSBQcm9ncmVzc01vbml0b3IgdG8gYmUgdXBkYXRlZDsNCisgICAgICogCQkJ CWlmIG5vdCBuZWVkZWQsIHVzZSBudWxsDQogICAgICAqIEByZXR1cm4gcHJvamVjdCB0aGUgcHJv amVjdCB0aGF0IHdhcyBjcmVhdGVkIGJhc2VkIG9uIHRoZSBmaWxlIHRoYXQgd2FzDQogICAgICAq ICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgb3BlbmVkDQotICAgICAqIA0KKyAgICAgKg0K ICAgICAgKiBUT0RPOiBTZXBhcmF0ZSB0aGlzIGludG8gYSBTd2luZyBzcGVjaWZpYyBjbGFzcyAt IHRmbQ0KICAgICAgKi8NCi0gICAgcHVibGljIFByb2plY3QgbG9hZFByb2plY3QyKEZpbGUgZmls ZSwgYm9vbGVhbiBzaG93VUksIA0KKyAgICBwdWJsaWMgUHJvamVjdCBsb2FkUHJvamVjdDIoRmls ZSBmaWxlLCBib29sZWFuIHNob3dVSSwNCiAgICAgICAgICAgICBQcm9ncmVzc01vbml0b3IgcG13 KSB7DQotICAgICAgICBMT0cuaW5mbygiTG9hZGluZyBwcm9qZWN0LiIpOw0KKyAgICAgICAgTE9H LmxvZyhMZXZlbC5JTkZPLCAiTG9hZGluZyBwcm9qZWN0LiIpOw0KIA0KICAgICAgICAgUGVyc2lz dGVuY2VNYW5hZ2VyIHBtID0gUGVyc2lzdGVuY2VNYW5hZ2VyLmdldEluc3RhbmNlKCk7DQogICAg ICAgICBQcm9qZWN0IG9sZFByb2plY3QgPSBQcm9qZWN0TWFuYWdlci5nZXRNYW5hZ2VyKCkuZ2V0 Q3VycmVudFByb2plY3QoKTsNCkBAIC0xNTU5LDcgKzE1NjIsNyBAQA0KICAgICAgICAgICAgIFBy b2plY3RNYW5hZ2VyLmdldE1hbmFnZXIoKS5yZW1vdmVQcm9qZWN0KG9sZFByb2plY3QpOw0KICAg ICAgICAgICAgIG9sZFByb2plY3QgPSBwOw0KICAgICAgICAgfQ0KLSAgICAgICAgDQorDQogICAg ICAgICBib29sZWFuIHN1Y2Nlc3MgPSBmYWxzZTsNCiANCiAgICAgICAgIC8vIFRPRE86DQpAQCAt MTU5OSw3ICsxNjAyLDcgQEANCiAgICAgICAgICAgICAgICAgaWYgKHBtdyAhPSBudWxsKSB7DQog ICAgICAgICAgICAgICAgICAgICBwZXJzaXN0ZXIuYWRkUHJvZ3Jlc3NMaXN0ZW5lcihwbXcpOw0K ICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIA0KKw0KIA0KICAgICAgICAgICAg ICAgICBwcm9qZWN0ID0gcGVyc2lzdGVyLmRvTG9hZChmaWxlKTsNCiANCkBAIC0xNjA3LDcgKzE2 MTAsNyBAQA0KICAgICAgICAgICAgICAgICAgICAgcGVyc2lzdGVyLnJlbW92ZVByb2dyZXNzTGlz dGVuZXIocG13KTsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICBUaHJlYWRV dGlscy5jaGVja0lmSW50ZXJydXB0ZWQoKTsNCi0gICAgICAgICAgICAgICAgDQorDQogLy8gICAg ICAgICAgICAgICAgaWYgKE1vZGVsLmdldERpYWdyYW1JbnRlcmNoYW5nZU1vZGVsKCkgIT0gbnVs bCkgew0KICAgICAgICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGFzc3VtZXMgbm8gbW9yZSB0aGFu IG9uZSBwcm9qZWN0IGF0IGEgdGltZQ0KICAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIGxvYWRl ZC4gIElmIGl0IGlzIGV2ZXIgcmVpbnN0aXR1dGVkLCB0aGlzIG5lZWRzIHRvDQpAQCAtMTYzMCw3 ICsxNjMzLDcgQEANCiAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmls ZQ0KICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uLnNldFN0cmluZyhBcmdvLktFWV9NT1NU X1JFQ0VOVF9QUk9KRUNUX0ZJTEUsDQogICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5nZXRD YW5vbmljYWxQYXRoKCkpOw0KLSAgICAgICAgICAgICAgICANCisNCiAgICAgICAgICAgICAgICAg dXBkYXRlU3RhdHVzKA0KICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0b3IubG9jYWxp emUoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVzbXNnLmJhci5vcGVu LXByb2plY3Qtc3RhdHVzLXJlYWQiLA0KQEAgLTE2NDQsMTMgKzE2NDcsMTQgQEANCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7ZXguZ2V0TWVzc2FnZSgpfSks DQogICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1VJKTsNCiAgICAgICAgICAgICB9IGNhdGNo IChPdXRPZk1lbW9yeUVycm9yIGV4KSB7DQotICAgICAgICAgICAgICAgIExPRy5lcnJvcigiT3V0 IG9mIG1lbW9yeSB3aGlsZSBsb2FkaW5nIHByb2plY3QiLCBleCk7DQorICAgICAgICAgICAgICAg IExPRy5sb2coTGV2ZWwuU0VWRVJFLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICJPdXQgb2Yg bWVtb3J5IHdoaWxlIGxvYWRpbmcgcHJvamVjdCIsIGV4KTsNCiAgICAgICAgICAgICAgICAgcmVw b3J0RXJyb3IoDQogICAgICAgICAgICAgICAgICAgICAgICAgcG13LA0KICAgICAgICAgICAgICAg ICAgICAgICAgIFRyYW5zbGF0b3IubG9jYWxpemUoImRpYWxvZy5lcnJvci5tZW1vcnkubGltaXQi KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBzaG93VUkpOw0KICAgICAgICAgICAgIH0gY2F0 Y2ggKGphdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiBleCkgew0KLSAgICAgICAgICAgICAg ICBMT0cuZXJyb3IoIlByb2plY3QgbG9hZGluZyBpbnRlcnJ1cHRlZCBieSB1c2VyIik7DQorICAg ICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiUHJvamVjdCBsb2FkaW5nIGludGVy cnVwdGVkIGJ5IHVzZXIiKTsNCiAgICAgICAgICAgICB9IGNhdGNoIChVbWxWZXJzaW9uRXhjZXB0 aW9uIGV4KSB7DQogICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKA0KICAgICAgICAgICAgICAg ICAgICAgICAgIHBtdywNCkBAIC0xNjYyLDcgKzE2NjYsNyBAQA0KICAgICAgICAgICAgICAgICBp ZiAoZXguZ2V0Q2F1c2UoKSBpbnN0YW5jZW9mIFhtaVJlZmVyZW5jZUV4Y2VwdGlvbikgew0KICAg ICAgICAgICAgICAgICAgICAgLy8gYW4gZXJyb3IgdGhhdCBjYW4gYmUgY29ycmVjdGVkIGJ5IHRo ZSB1c2VyLCBzbyBubyBzdGFjaw0KICAgICAgICAgICAgICAgICAgICAgLy8gdHJhY2UsIGJ1dCBp bnN0ZWFkIGFuIGV4cGxhbmF0aW9uIGFuZCBhIGhpbnQgaG93IHRvIGZpeA0KLSAgICAgICAgICAg ICAgICAgICAgU3RyaW5nIHJlZmVyZW5jZSA9IA0KKyAgICAgICAgICAgICAgICAgICAgU3RyaW5n IHJlZmVyZW5jZSA9DQogICAgICAgICAgICAgICAgICAgICAgICAgKChYbWlSZWZlcmVuY2VFeGNl cHRpb24pIGV4LmdldENhdXNlKCkpLmdldFJlZmVyZW5jZSgpOw0KICAgICAgICAgICAgICAgICAg ICAgcmVwb3J0RXJyb3IoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtdywNCkBAIC0x NjgwLDcgKzE2ODQsNyBAQA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNo b3dVSSwgZXgpOw0KICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfSBjYXRjaCAoSU9F eGNlcHRpb24gZXgpIHsNCi0gICAgICAgICAgICAgICAgTE9HLmVycm9yKCJFeGNlcHRpb24gd2hp bGUgbG9hZGluZyBwcm9qZWN0IiwgZXgpOw0KKyAgICAgICAgICAgICAgICBMT0cubG9nKExldmVs LlNFVkVSRSwgIkV4Y2VwdGlvbiB3aGlsZSBsb2FkaW5nIHByb2plY3QiLCBleCk7DQogICAgICAg ICAgICAgICAgIHJlcG9ydEVycm9yKA0KICAgICAgICAgICAgICAgICAgICAgICAgIHBtdywNCiAg ICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdG9yLmxvY2FsaXplKA0KQEAgLTE2ODgsNyAr MTY5Miw3IEBADQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10g e2ZpbGUuZ2V0TmFtZSgpfSksDQogICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1VJLCBleCk7 DQogICAgICAgICAgICAgfSBjYXRjaCAoT3BlbkV4Y2VwdGlvbiBleCkgew0KLSAgICAgICAgICAg ICAgICBMT0cuZXJyb3IoIkV4Y2VwdGlvbiB3aGlsZSBsb2FkaW5nIHByb2plY3QiLCBleCk7DQor ICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiRXhjZXB0aW9uIHdoaWxlIGxv YWRpbmcgcHJvamVjdCIsIGV4KTsNCiAgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoDQogICAg ICAgICAgICAgICAgICAgICAgICAgcG13LA0KICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5z bGF0b3IubG9jYWxpemUoDQpAQCAtMTcwMyw3ICsxNzA3LDcgQEANCiAgICAgICAgICAgICAgICAg ICAgICAgICBuZXcgT2JqZWN0W10ge2V4LmdldFJlZmVyZW5jZSgpLCBleC5nZXRNZXNzYWdlKCl9 KSwNCiAgICAgICAgICAgICAgICAgICAgIGV4LnRvU3RyaW5nKCksIHNob3dVSSk7DQogICAgICAg ICAgICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBleCkgew0KLSAgICAgICAgICAgICAgICBM T0cuZXJyb3IoIkV4Y2VwdGlvbiB3aGlsZSBsb2FkaW5nIHByb2plY3QiLCBleCk7DQorICAgICAg ICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiRXhjZXB0aW9uIHdoaWxlIGxvYWRpbmcg cHJvamVjdCIsIGV4KTsNCiAgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoDQogICAgICAgICAg ICAgICAgICAgICAgICAgcG13LA0KICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0b3Iu bG9jYWxpemUoDQpAQCAtMTcxNCwxNiArMTcxOCwxNiBAQA0KIA0KICAgICAgICAgICAgICAgICB0 cnkgew0KICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7DQotICAgICAgICAgICAg ICAgICAgICAgICAgcHJvamVjdCA9IA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Qg PQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0TWFuYWdlci5nZXRNYW5hZ2Vy KCkubWFrZUVtcHR5UHJvamVjdCgpOw0KICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg ICAgICAgICAgICAgUHJvamVjdE1hbmFnZXIuZ2V0TWFuYWdlcigpLnNldEN1cnJlbnRQcm9qZWN0 KHByb2plY3QpOw0KICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFByb2plY3QgIT0gbnVsbCkg ew0KICAgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3RNYW5hZ2VyLmdldE1hbmFnZXIoKS5y ZW1vdmVQcm9qZWN0KG9sZFByb2plY3QpOw0KICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAg ICAgICAgICAgICAgICAgDQorDQogICAgICAgICAgICAgICAgICAgICBwcm9qZWN0LmdldFByb2pl Y3RTZXR0aW5ncygpLmluaXQoKTsNCi0gICAgICAgICAgICAgICAgICAgIA0KKw0KICAgICAgICAg ICAgICAgICAgICAgQ29tbWFuZCBjbWQgPSBuZXcgTm9uVW5kb2FibGVDb21tYW5kKCkgew0KICAg ICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBPYmplY3QgZXhlY3V0ZSgpIHsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0ZW1wb3JhcnkuIExvYWQgcHJvamVjdA0K QEAgLTE3MzUsMTQgKzE3MzksMTUgQEANCiAgICAgICAgICAgICAgICAgICAgIH07DQogICAgICAg ICAgICAgICAgICAgICBwcm9qZWN0LmdldFVuZG9NYW5hZ2VyKCkuYWRkQ29tbWFuZChjbWQpOw0K IA0KLSAgICAgICAgICAgICAgICAgICAgTE9HLmluZm8oIlRoZXJlIGFyZSAiICsgcHJvamVjdC5n ZXREaWFncmFtTGlzdCgpLnNpemUoKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIg ZGlhZ3JhbXMgaW4gdGhlIGN1cnJlbnQgcHJvamVjdCIpOw0KKyAgICAgICAgICAgICAgICAgICAg TE9HLmxvZyhMZXZlbC5JTkZPLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlcmUg YXJlIHswfSBkaWFncmFtcyBpbiB0aGUgY3VycmVudCBwcm9qZWN0IiwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcHJvamVjdC5nZXREaWFncmFtTGlzdCgpLnNpemUoKSk7DQogDQogICAg ICAgICAgICAgICAgICAgICBEZXNpZ25lci5lbmFibGVDcml0aXF1aW5nKCk7DQogICAgICAgICAg ICAgICAgIH0gZmluYWxseSB7DQogICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgc2F2 ZSBhY3Rpb24gaXMgYWx3YXlzIHJlaW5zdGF0ZWQNCiAgICAgICAgICAgICAgICAgICAgIHRoaXMu c2F2ZUFjdGlvbiA9IHJlbWVtYmVyZWRTYXZlQWN0aW9uOw0KLSAgICAgICAgICAgICAgICAgICAg DQorDQogICAgICAgICAgICAgICAgICAgICAvLyBXZSBjbGVhciB0aGUgc2F2ZS1yZXF1aXJlZCBm bGFnIG9uIHRoZSBTd2luZyBldmVudCB0aHJlYWQNCiAgICAgICAgICAgICAgICAgICAgIC8vIGlu IHRoZSBob3BlcyB0aGF0IGl0IGdldHMgZG9uZSBhZnRlciBhbnkgb3RoZXIgYmFja2dyb3VuZA0K ICAgICAgICAgICAgICAgICAgICAgLy8gd29yayAobGlzdGVuZXIgdXBkYXRlcykgdGhhdCBpcyBi ZWluZyBkb25lIHRoZXJlDQpAQCAtMTc3NCw3ICsxNzc5LDcgQEANCiAgICAgICAgIGlmIChzaG93 VUkpIHsNCiAgICAgICAgICAgICBpZiAobW9uaXRvciAhPSBudWxsKSB7DQogICAgICAgICAgICAg ICAgIG1vbml0b3Iubm90aWZ5TWVzc2FnZSgNCi0gICAgICAgICAgICAgICAgICAgICAgICBUcmFu c2xhdG9yLmxvY2FsaXplKCJkaWFsb2cuZXJyb3IudGl0bGUiKSwgDQorICAgICAgICAgICAgICAg ICAgICAgICAgVHJhbnNsYXRvci5sb2NhbGl6ZSgiZGlhbG9nLmVycm9yLnRpdGxlIiksDQogICAg ICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRvci5sb2NhbGl6ZSgiZGlhbG9nLmVycm9yLm9w ZW4uc2F2ZS5lcnJvciIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UpOw0KICAg ICAgICAgICAgIH0gZWxzZSB7DQpAQCAtMTgxMCw3ICsxODE1LDcgQEANCiAgICAgICAgICAgICBp ZiAobW9uaXRvciAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAgIG1vbml0b3Iubm90aWZ5TWVz c2FnZSgNCiAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdG9yLmxvY2FsaXplKCJkaWFs b2cuZXJyb3IudGl0bGUiKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCANCisg ICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLA0KICAgICAgICAgICAgICAgICAgICAgICAg IEV4Y2VwdGlvbkRpYWxvZy5mb3JtYXRFeGNlcHRpb24oDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtZXNzYWdlLCBleCwgZXggaW5zdGFuY2VvZiBPcGVuRXhjZXB0aW9uKSk7DQog ICAgICAgICAgICAgfSBlbHNlIHsNCkBAIC0xODIwLDcgKzE4MjUsNyBAQA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuZXcgRXhjZXB0aW9uRGlhbG9nKA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEFyZ29GcmFtZS5nZXRGcmFtZSgpLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0b3IubG9jYWxpemUoImRpYWxvZy5lcnJvci50 aXRsZSIpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsIA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uRGlhbG9nLmZvcm1hdEV4Y2VwdGlv bigNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNz YWdlLCBleCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBleCBpbnN0YW5jZW9mIE9wZW5FeGNlcHRpb24pKTsNCkBAIC0xOTE3LDcgKzE5MjIsNyBAQA0K IA0KICAgICAgICAgSkZpbGVDaG9vc2VyIGNob29zZXIgPSBudWxsOw0KICAgICAgICAgVVJJIHVy aSA9IHAuZ2V0VVJJKCk7DQotICAgICAgICANCisNCiAgICAgICAgIGlmICh1cmkgIT0gbnVsbCkg ew0KICAgICAgICAgICAgIEZpbGUgcHJvamVjdEZpbGUgPSBuZXcgRmlsZSh1cmkpOw0KICAgICAg ICAgICAgIGlmIChwcm9qZWN0RmlsZS5sZW5ndGgoKSA+IDApIHsNCkBAIC0xOTQwLDcgKzE5NDUs NyBAQA0KICAgICAgICAgY2hvb3Nlci5zZXRBY2NlcHRBbGxGaWxlRmlsdGVyVXNlZChmYWxzZSk7 DQogDQogICAgICAgICBQZXJzaXN0ZW5jZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zZXRTYXZlRmls ZUNob29zZXJGaWx0ZXJzKA0KLSAgICAgICAgICAgICAgICBjaG9vc2VyLCANCisgICAgICAgICAg ICAgICAgY2hvb3NlciwNCiAgICAgICAgICAgICAgICAgdXJpICE9IG51bGwgPyBVdGlsLlVSSVRv RmlsZW5hbWUodXJpLnRvU3RyaW5nKCkpIDogbnVsbCk7DQogDQogICAgICAgICBpbnQgcmV0dmFs ID0gY2hvb3Nlci5zaG93U2F2ZURpYWxvZyhwYik7DQpAQCAtMTk2Niw3ICsxOTcxLDcgQEANCiAg ICAgICAgIH0NCiAgICAgICAgIHJldHVybiBudWxsOw0KICAgICB9DQotICAgIA0KKw0KICAgICAv KioNCiAgICAgICogVGhlIFVJRC4NCiAgICAgICovDQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJn b3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL1N0eWxlUGFuZWwuamF2YQ0KVXJsOiBodHRwOi8v YXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9zcmMvYXJnb3Vt bC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL1N0eWxlUGFuZWwuamF2YT92aWV3PWRpZmYmcGF0aHJl dj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1 bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9TdHlsZVBhbmVsLmphdmEJKG9y aWdpbmFsKQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvU3R5 bGVQYW5lbC5qYXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQog LyogJElkJA0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBD b250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiBDb250 cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dy YW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZhaWxhYmxl IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQogICog d2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQN CkBAIC00MywxMyArNDMsMTQgQEANCiBpbXBvcnQgamF2YS5hd3QuZXZlbnQuSXRlbUV2ZW50Ow0K IGltcG9ydCBqYXZhLmF3dC5ldmVudC5JdGVtTGlzdGVuZXI7DQogaW1wb3J0IGphdmEuYmVhbnMu UHJvcGVydHlDaGFuZ2VFdmVudDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQor aW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiANCiBpbXBvcnQgamF2YXguc3dpbmcu ZXZlbnQuRG9jdW1lbnRFdmVudDsNCiBpbXBvcnQgamF2YXguc3dpbmcuZXZlbnQuRG9jdW1lbnRM aXN0ZW5lcjsNCiBpbXBvcnQgamF2YXguc3dpbmcuZXZlbnQuTGlzdFNlbGVjdGlvbkV2ZW50Ow0K IGltcG9ydCBqYXZheC5zd2luZy5ldmVudC5MaXN0U2VsZWN0aW9uTGlzdGVuZXI7DQogDQotaW1w b3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5hcHBsaWNh dGlvbi5hcGkuQWJzdHJhY3RBcmdvSlBhbmVsOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5pMThuLlRy YW5zbGF0b3I7DQogaW1wb3J0IG9yZy5hcmdvdW1sLm1vZGVsLk1vZGVsOw0KQEAgLTcxLDcgKzcy LDggQEANCiAgICAgLyoqDQogICAgICAqIExvZ2dlci4NCiAgICAgICovDQotICAgIHByaXZhdGUg c3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dnZXIuZ2V0TG9nZ2VyKFN0eWxlUGFuZWwuY2xh c3MpOw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCisgICAgICAgIExv Z2dlci5nZXRMb2dnZXIoU3R5bGVQYW5lbC5jbGFzcy5nZXROYW1lKCkpOw0KIA0KICAgICBwcml2 YXRlIEZpZyBwYW5lbFRhcmdldDsNCiANCkBAIC0xNTUsNyArMTU3LDcgQEANCiAgICAgICogQHNl ZSBqYXZheC5zd2luZy5ldmVudC5Eb2N1bWVudExpc3RlbmVyI2luc2VydFVwZGF0ZShqYXZheC5z d2luZy5ldmVudC5Eb2N1bWVudEV2ZW50KQ0KICAgICAgKi8NCiAgICAgcHVibGljIHZvaWQgaW5z ZXJ0VXBkYXRlKERvY3VtZW50RXZlbnQgZSkgew0KLQlMT0cuZGVidWcoZ2V0Q2xhc3MoKS5nZXRO YW1lKCkgKyAiIGluc2VydCIpOw0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiezB9IGlu c2VydCIsIGdldENsYXNzKCkuZ2V0TmFtZSgpKTsNCiAgICAgfQ0KIA0KICAgICAvKg0KDQpNb2Rp ZmllZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9TdHlsZVBhbmVs RmlnLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2Fy Z291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9TdHlsZVBhbmVs RmlnLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291 bWwvdWkvU3R5bGVQYW5lbEZpZy5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3Vt bC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL1N0eWxlUGFuZWxGaWcuamF2YQkyMDEyLTEyLTMwIDA1 OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQor ICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICog QWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1h dGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVj bGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlz dHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNDYsNiArNDYsOCBAQA0KIGltcG9y dCBqYXZhLmF3dC5ldmVudC5JdGVtTGlzdGVuZXI7DQogaW1wb3J0IGphdmEuYXd0LmV2ZW50Lktl eUV2ZW50Ow0KIGltcG9ydCBqYXZhLmF3dC5ldmVudC5LZXlMaXN0ZW5lcjsNCitpbXBvcnQgamF2 YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsN CiANCiBpbXBvcnQgamF2YXguc3dpbmcuRGVmYXVsdENvbWJvQm94TW9kZWw7DQogaW1wb3J0IGph dmF4LnN3aW5nLkpDb2xvckNob29zZXI7DQpAQCAtNTQsMTMgKzU2LDEyIEBADQogaW1wb3J0IGph dmF4LnN3aW5nLkpUZXh0RmllbGQ7DQogaW1wb3J0IGphdmF4LnN3aW5nLnRleHQuRG9jdW1lbnQ7 DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KIGltcG9ydCBvcmcuYXJnb3Vt bC5pMThuLlRyYW5zbGF0b3I7DQogaW1wb3J0IG9yZy5hcmdvdW1sLnN3aW5nZXh0LlNwYWNlclBh bmVsOw0KIGltcG9ydCBvcmcuYXJnb3VtbC51aS50YXJnZXRtYW5hZ2VyLlRhcmdldE1hbmFnZXI7 DQogaW1wb3J0IG9yZy5hcmdvdW1sLnVtbC5kaWFncmFtLkFyZ29EaWFncmFtOw0KLWltcG9ydCBv cmcuYXJnb3VtbC51bWwuZGlhZ3JhbS5EaWFncmFtVXRpbHM7DQogaW1wb3J0IG9yZy5hcmdvdW1s LnVtbC5kaWFncmFtLkRpYWdyYW1TZXR0aW5ncy5TdGVyZW90eXBlU3R5bGU7DQoraW1wb3J0IG9y Zy5hcmdvdW1sLnVtbC5kaWFncmFtLkRpYWdyYW1VdGlsczsNCiBpbXBvcnQgb3JnLmFyZ291bWwu dW1sLmRpYWdyYW0udWkuQXJnb0ZpZzsNCiBpbXBvcnQgb3JnLmFyZ291bWwudW1sLmRpYWdyYW0u dWkuRmlnRWRnZU1vZGVsRWxlbWVudDsNCiBpbXBvcnQgb3JnLmFyZ291bWwudW1sLmRpYWdyYW0u dWkuRmlnTm9kZU1vZGVsRWxlbWVudDsNCkBAIC03MCwyMSArNzEsMjIgQEANCiBpbXBvcnQgb3Jn LnRpZ3Jpcy5nZWYudWkuQ29sb3JSZW5kZXJlcjsNCiANCiAvKioNCi0gKiBUaGUgYmFzaWMgc3R5 bGVwYW5lbCBmb3IgYSBGaWcgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIHNlZSBhbmQgYWRqdXN0 IA0KLSAqIHRoZSBjb21tb24gYXR0cmlidXRlcyBvZiBhIEZpZzogDQorICogVGhlIGJhc2ljIHN0 eWxlcGFuZWwgZm9yIGEgRmlnIHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byBzZWUgYW5kIGFkanVz dA0KKyAqIHRoZSBjb21tb24gYXR0cmlidXRlcyBvZiBhIEZpZzoNCiAgKiB0aGUgYm91bmRhcmll cyBib3gsDQotICogbGluZSBhbmQgZmlsbCBjb2xvciBpbmZvcm1hdGlvbiANCisgKiBsaW5lIGFu ZCBmaWxsIGNvbG9yIGluZm9ybWF0aW9uDQogICogYW5kIHRoZSBzdGVyZW90eXBlIHZpZXcgY29t Ym8gYm94LiA8cD4NCi0gKiANCisgKg0KICAqIFNob3duIHRvIHRoZSB1c2VyIGFzIHRoZSAiUHJl c2VudGF0aW9uIiB0YWIuDQogICovDQogcHVibGljIGNsYXNzIFN0eWxlUGFuZWxGaWcNCiAgICAg ZXh0ZW5kcyBTdHlsZVBhbmVsDQogICAgIGltcGxlbWVudHMgSXRlbUxpc3RlbmVyLA0KICAgICAg ICAgRm9jdXNMaXN0ZW5lciwgS2V5TGlzdGVuZXIgew0KLSAgICANCi0gICAgcHJpdmF0ZSBzdGF0 aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoU3R5bGVQYW5lbEZpZy5jbGFz cyk7DQotICAgIA0KKw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCisg ICAgICAgIExvZ2dlci5nZXRMb2dnZXIoU3R5bGVQYW5lbEZpZy5jbGFzcy5nZXROYW1lKCkpOw0K Kw0KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ1VTVE9NX0lURU0gPQ0KICAgICAg ICAgVHJhbnNsYXRvci5sb2NhbGl6ZSgibGFiZWwuc3R5bGVwYW5lLmN1c3RvbSIpICsgIi4uLiI7 DQogDQpAQCAtMTA3LDcgKzEwOSw3IEBADQogICAgICAgICBuZXcgSkxhYmVsKFRyYW5zbGF0b3Iu bG9jYWxpemUoIm1lbnUucG9wdXAuc3RlcmVvdHlwZS12aWV3IikgKyAiOiAiKTsNCiANCiAgICAg cHJpdmF0ZSBKQ29tYm9Cb3ggc3RlcmVvRmllbGQgPSBuZXcgSkNvbWJvQm94KCk7DQotICAgIA0K Kw0KICAgICBwcml2YXRlIFNwYWNlclBhbmVsIHNwYWNlciA9IG5ldyBTcGFjZXJQYW5lbCgpOw0K IA0KICAgICBwcml2YXRlIFNwYWNlclBhbmVsIHNwYWNlcjIgPSBuZXcgU3BhY2VyUGFuZWwoKTsN CkBAIC0yMDUsMTAgKzIwNywxMCBAQA0KICAgICAgICAgbGluZUZpZWxkLmFkZEl0ZW0oQ29sb3Iu b3JhbmdlKTsNCiAgICAgICAgIGxpbmVGaWVsZC5hZGRJdGVtKENvbG9yLnBpbmspOw0KICAgICAg ICAgbGluZUZpZWxkLmFkZEl0ZW0oQ1VTVE9NX0lURU0pOw0KLSAgICAgICAgDQorDQogICAgICAg ICBEZWZhdWx0Q29tYm9Cb3hNb2RlbCBtb2RlbCA9IG5ldyBEZWZhdWx0Q29tYm9Cb3hNb2RlbCgp Ow0KICAgICAgICAgc3RlcmVvRmllbGQuc2V0TW9kZWwobW9kZWwpOw0KLSAgICAgICAgDQorDQog ICAgICAgICAvLyBOT1RFOiBUaGVzZSBtdXN0IHN0YXkgaW4gdGhpcyBvcmRlciB0byBtYXRjaCBy ZW5kZXJpbmcgc3R5bGVzDQogICAgICAgICBtb2RlbC5hZGRFbGVtZW50KFRyYW5zbGF0b3INCiAg ICAgICAgICAgICAgICAgLmxvY2FsaXplKCJtZW51LnBvcHVwLnN0ZXJlb3R5cGUtdmlldy50ZXh0 dWFsIikpOw0KQEAgLTMxMiw3ICszMTQsNyBAQA0KIA0KICAgICAgICAgc3RlcmVvRmllbGQuc2V0 RW5hYmxlZCh0YXJnZXQgaW5zdGFuY2VvZiBTdGVyZW90eXBlU3R5bGVkKTsNCiAgICAgICAgIHN0 ZXJlb0xhYmVsLnNldEVuYWJsZWQodGFyZ2V0IGluc3RhbmNlb2YgU3RlcmVvdHlwZVN0eWxlZCk7 DQotICAgICAgICANCisNCiAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBTdGVyZW90eXBl U3R5bGVkKSB7DQogICAgICAgICAgICAgU3RlcmVvdHlwZVN0eWxlZCBmaWcgPSAoU3RlcmVvdHlw ZVN0eWxlZCkgdGFyZ2V0Ow0KICAgICAgICAgICAgIHN0ZXJlb0ZpZWxkLnNldFNlbGVjdGVkSW5k ZXgoZmlnLmdldFN0ZXJlb3R5cGVTdHlsZSgpLm9yZGluYWwoKSk7DQpAQCAtNDIzLDcgKzQyNSw4 IEBADQogICAgICAgICAgICAgICAgIC8vIFRPRE86IFRoaXMgZXhjZXB0aW9uIHdpbGwgYmUgdGhy b3duIGR1cmluZyBhdXRvc2Nyb2xsaW5nDQogICAgICAgICAgICAgICAgIC8vIHdoZW4gdGhlIGVk Z2Ugb2YgdGhlIGNhbnZhcyBpcyByZWFjaGVkIGNhdXNpbmcgZWl0aGVyDQogICAgICAgICAgICAg ICAgIC8vIHRoZSB3aWR0aCBvciBoZWlnaHQgdG8gYmUgImFkanVzdGVkIiB0byBhIG5lZ2F0aXZl IHZhbHVlDQotICAgICAgICAgICAgICAgIExPRy53YXJuKCJQYXJ0IG9mIGJvdW5kaW5nIGJveCBp cyBvZmYgc2NyZWVuICIgKyByZXMpOw0KKyAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLldB Uk5JTkcsDQorICAgICAgICAgICAgICAgICAgICAgICAgIlBhcnQgb2YgYm91bmRpbmcgYm94IGlz IG9mZiBzY3JlZW4gIiArIHJlcyk7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIGlmIChy ZXMud2lkdGggPCAwIHx8IHJlcy5oZWlnaHQgPCAwKSB7DQogICAgICAgICAgICAgICAgIC8vIFRP RE86IFRoaXMgZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duIGR1cmluZyBhdXRvc2Nyb2xsaW5nDQpA QCAtNDkxLDcgKzQ5NCw3IEBADQogICAgICAgICB9DQogICAgICAgICB0YXJnZXQuc2V0RmlsbGVk KGlzQ29sb3IpOw0KICAgICAgICAgdGFyZ2V0LmVuZFRyYW5zKCk7DQotICAgICAgICANCisNCiAg ICAgICAgIC8vIFRPRE86IFRoZSBmb2xsb3dpbmcgaGFuZGxpbmcgb2YgbXVsdGlzZWxlY3Rpb24g aXMganVzdCBhIGxvY2FsDQogICAgICAgICAvLyBzb2x1dGlvbiBmb3IgdGhlIGZpbGwgY29sb3Is IGJldHRlciBmaW5kIGEgbW9yZSBnZW5lcmFsIHNvbHV0aW9uOg0KICAgICAgICAgLy8gKEkgZG9u J3Qga25vdyBpZiBpdCdzIHVuZG9hYmxlIHRoaXMgd2F5IC0gdGhuKQ0KQEAgLTUyOCw3ICs1MzEs NyBAQA0KICAgICAgICAgfQ0KICAgICAgICAgdGFyZ2V0LnNldExpbmVXaWR0aChpc0NvbG9yID8g QXJnb0ZpZy5MSU5FX1dJRFRIIDogMCk7DQogICAgICAgICB0YXJnZXQuZW5kVHJhbnMoKTsNCi0g ICAgICAgIA0KKw0KICAgICAgICAgLy8gVE9ETzogVGhlIGZvbGxvd2luZyBoYW5kbGluZyBvZiBt dWx0aXNlbGVjdGlvbiBpcyBqdXN0IGEgbG9jYWwNCiAgICAgICAgIC8vIHNvbHV0aW9uIGZvciB0 aGUgbGluZSBjb2xvciwgYmV0dGVyIGZpbmQgYSBtb3JlIGdlbmVyYWwgc29sdXRpb246DQogICAg ICAgICAvLyAoSSBkb24ndCBrbm93IGlmIGl0J3MgdW5kb2FibGUgdGhpcyB3YXkgLSB0aG4pDQpA QCAtNTYwLDE0ICs1NjMsMTQgQEANCiAgICAgICAgICAgICAgICAgJiYgdGFyZ2V0ICE9IG51bGwp IHsNCiAgICAgICAgICAgICBpZiAoc3JjID09IGZpbGxGaWVsZCkgew0KICAgICAgICAgICAgICAg ICBpZiAoZS5nZXRJdGVtKCkgPT0gQ1VTVE9NX0lURU0pIHsNCi0gICAgICAgICAgICAgICAgICAg IGhhbmRsZUN1c3RvbUNvbG9yKGZpbGxGaWVsZCwgDQorICAgICAgICAgICAgICAgICAgICBoYW5k bGVDdXN0b21Db2xvcihmaWxsRmllbGQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJs YWJlbC5zdHlsZXBhbmUuY3VzdG9tLWZpbGwtY29sb3IiLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0YXJnZXQuZ2V0RmlsbENvbG9yKCkpOw0KICAgICAgICAgICAgICAgICB9DQogICAg ICAgICAgICAgICAgIHNldFRhcmdldEZpbGwoKTsNCiAgICAgICAgICAgICB9IGVsc2UgaWYgKHNy YyA9PSBsaW5lRmllbGQpIHsNCiAgICAgICAgICAgICAgICAgaWYgKGUuZ2V0SXRlbSgpID09IENV U1RPTV9JVEVNKSB7DQotICAgICAgICAgICAgICAgICAgICBoYW5kbGVDdXN0b21Db2xvcihsaW5l RmllbGQsIA0KKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ3VzdG9tQ29sb3IobGluZUZpZWxk LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGFiZWwuc3R5bGVwYW5lLmN1c3RvbS1s aW5lLWNvbG9yIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmdldExpbmVD b2xvcigpKTsNCiAgICAgICAgICAgICAgICAgfQ0KQEAgLTU3NSw3ICs1NzgsNyBAQA0KICAgICAg ICAgICAgIH0gZWxzZSBpZiAoc3JjID09IHN0ZXJlb0ZpZWxkKSB7DQogICAgICAgICAgICAgICAg IGlmICh0YXJnZXQgaW5zdGFuY2VvZiBTdGVyZW90eXBlU3R5bGVkKSB7DQogICAgICAgICAgICAg ICAgICAgICBPYmplY3QgaXRlbSA9IGUuZ2V0SXRlbSgpOw0KLSAgICAgICAgICAgICAgICAgICAg RGVmYXVsdENvbWJvQm94TW9kZWwgbW9kZWwgPSANCisgICAgICAgICAgICAgICAgICAgIERlZmF1 bHRDb21ib0JveE1vZGVsIG1vZGVsID0NCiAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVs dENvbWJvQm94TW9kZWwpIHN0ZXJlb0ZpZWxkLmdldE1vZGVsKCk7DQogICAgICAgICAgICAgICAg ICAgICBpbnQgaWR4ID0gbW9kZWwuZ2V0SW5kZXhPZihpdGVtKTsNCiAgICAgICAgICAgICAgICAg ICAgIFN0ZXJlb3R5cGVTdHlsZWQgZmlnID0gKFN0ZXJlb3R5cGVTdHlsZWQpIHRhcmdldDsNCg0K TW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvU3dpbmdX b3JrZXIuamF2YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2Uv YXJnb3VtbC90cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL1N3aW5nV29y a2VyLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291 bWwvdWkvU3dpbmdXb3JrZXIuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwt YXBwL3NyYy9vcmcvYXJnb3VtbC91aS9Td2luZ1dvcmtlci5qYXZhCTIwMTItMTItMzAgMDU6MDY6 MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQogLyogJElkJA0KICAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Kg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBD b3B5cmlnaHQgKGMpIDIwMDktMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwg cmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJp YWxzDQogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBz ZSBQdWJsaWMgTGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmli dXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCkBAIC00MSwxMSArNDEsMTIgQEANCiBpbXBvcnQg amF2YS5hd3QuQ3Vyc29yOw0KIGltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25FdmVudDsNCiBp bXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uTGlzdGVuZXI7DQoraW1wb3J0IGphdmEudXRpbC5s b2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQogaW1w b3J0IGphdmF4LnN3aW5nLlN3aW5nVXRpbGl0aWVzOw0KIGltcG9ydCBqYXZheC5zd2luZy5UaW1l cjsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdv dW1sLnN3aW5nZXh0LkdsYXNzUGFuZTsNCiBpbXBvcnQgb3JnLmFyZ291bWwudGFza21nbXQuUHJv Z3Jlc3NNb25pdG9yOw0KIGltcG9ydCBvcmcuYXJnb3VtbC51dGlsLkFyZ29GcmFtZTsNCkBAIC01 NSw3ICs1Niw3IEBADQogICogU3dpbmdXb3JrZXIgMyksIGFuIGFic3RyYWN0IGNsYXNzIHRoYXQg eW91IHN1YmNsYXNzIHRvDQogICogcGVyZm9ybSBHVUktcmVsYXRlZCB3b3JrIGluIGEgZGVkaWNh dGVkIHRocmVhZC4gIEZvcg0KICAqIGluc3RydWN0aW9ucyBvbiBhbmQgZXhhbXBsZXMgb2YgdXNp bmcgdGhpcyBjbGFzcywgc2VlOg0KLSAqIA0KKyAqDQogICogaHR0cDovL2phdmEuc3VuLmNvbS9k b2NzL2Jvb2tzL3R1dG9yaWFsL3Vpc3dpbmcvbWlzYy90aHJlYWRzLmh0bWwNCiAgKg0KICAqIE5v dGUgdGhhdCB0aGUgQVBJIGNoYW5nZWQgc2xpZ2h0bHkgaW4gdGhlIDNyZCB2ZXJzaW9uOg0KQEAg LTYzLDE5ICs2NCwxOSBAQA0KICAqIGNyZWF0aW5nIGl0Lg0KICAqLw0KIHB1YmxpYyBhYnN0cmFj dCBjbGFzcyBTd2luZ1dvcmtlciB7DQotCQ0KKw0KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBM b2dnZXIgTE9HID0NCi0gICAgICAgIExvZ2dlci5nZXRMb2dnZXIoU3dpbmdXb3JrZXIuY2xhc3Mp Ow0KLQkNCisgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoU3dpbmdXb3JrZXIuY2xhc3MuZ2V0TmFt ZSgpKTsNCisNCiAgICAgcHJpdmF0ZSBPYmplY3QgdmFsdWU7ICAvLyBzZWUgZ2V0VmFsdWUoKSwg c2V0VmFsdWUoKQ0KIA0KICAgICBwcml2YXRlIEdsYXNzUGFuZSBnbGFzc1BhbmU7DQogDQogICAg IHByaXZhdGUgVGltZXIgdGltZXI7DQotICAgIA0KLSAgICBwcml2YXRlIFByb2dyZXNzTW9uaXRv ciBwbXc7IA0KLSAgICANCi0gICAgLyoqIA0KKw0KKyAgICBwcml2YXRlIFByb2dyZXNzTW9uaXRv ciBwbXc7DQorDQorICAgIC8qKg0KICAgICAgKiBDbGFzcyB0byBtYWludGFpbiByZWZlcmVuY2Ug dG8gY3VycmVudCB3b3JrZXIgdGhyZWFkDQogICAgICAqIHVuZGVyIHNlcGFyYXRlIHN5bmNocm9u aXphdGlvbiBjb250cm9sLg0KICAgICAgKi8NCkBAIC05Nyw0MyArOTgsNDMgQEANCiANCiAgICAg cHJpdmF0ZSBUaHJlYWRWYXIgdGhyZWFkVmFyOw0KIA0KLSAgICAvKiogDQotICAgICAqIEdldCB0 aGUgdmFsdWUgcHJvZHVjZWQgYnkgdGhlIHdvcmtlciB0aHJlYWQsIG9yIG51bGwgaWYgaXQgDQor ICAgIC8qKg0KKyAgICAgKiBHZXQgdGhlIHZhbHVlIHByb2R1Y2VkIGJ5IHRoZSB3b3JrZXIgdGhy ZWFkLCBvciBudWxsIGlmIGl0DQogICAgICAqIGhhc24ndCBiZWVuIGNvbnN0cnVjdGVkIHlldC4N Ci0gICAgICogDQorICAgICAqDQogICAgICAqIEByZXR1cm4gCXRoZSB2YWx1ZSBwcm9kdWNlZCBi eSB0aGUgd29ya2VyIHRocmVhZA0KICAgICAgKi8NCi0gICAgcHJvdGVjdGVkIHN5bmNocm9uaXpl ZCBPYmplY3QgZ2V0VmFsdWUoKSB7IA0KLSAgICAgICAgcmV0dXJuIHZhbHVlOyANCisgICAgcHJv dGVjdGVkIHN5bmNocm9uaXplZCBPYmplY3QgZ2V0VmFsdWUoKSB7DQorICAgICAgICByZXR1cm4g dmFsdWU7DQogICAgIH0NCiANCi0gICAgLyoqIA0KLSAgICAgKiBTZXQgdGhlIHZhbHVlIHByb2R1 Y2VkIGJ5IHdvcmtlciB0aHJlYWQgDQorICAgIC8qKg0KKyAgICAgKiBTZXQgdGhlIHZhbHVlIHBy b2R1Y2VkIGJ5IHdvcmtlciB0aHJlYWQNCiAgICAgICovDQotICAgIHByaXZhdGUgc3luY2hyb25p emVkIHZvaWQgc2V0VmFsdWUoT2JqZWN0IHgpIHsgDQotICAgICAgICB2YWx1ZSA9IHg7IA0KKyAg ICBwcml2YXRlIHN5bmNocm9uaXplZCB2b2lkIHNldFZhbHVlKE9iamVjdCB4KSB7DQorICAgICAg ICB2YWx1ZSA9IHg7DQogICAgIH0NCiANCi0gICAgLyoqIA0KLSAgICAgKiBDb21wdXRlIHRoZSB2 YWx1ZSB0byBiZSByZXR1cm5lZCBieSB0aGUgPGNvZGU+Z2V0PC9jb2RlPiBtZXRob2QuIA0KLSAg ICAgKiANCi0gICAgICogQHBhcmFtIHByb2dyZXNzTW9uaXRvcgl0aGUgUHJvZ3Jlc3NNb25pdG9y V2luZG93IGNsYXNzIC0gdGhpcyANCisgICAgLyoqDQorICAgICAqIENvbXB1dGUgdGhlIHZhbHVl IHRvIGJlIHJldHVybmVkIGJ5IHRoZSA8Y29kZT5nZXQ8L2NvZGU+IG1ldGhvZC4NCisgICAgICoN CisgICAgICogQHBhcmFtIHByb2dyZXNzTW9uaXRvcgl0aGUgUHJvZ3Jlc3NNb25pdG9yV2luZG93 IGNsYXNzIC0gdGhpcw0KICAgICAgKiAJICAgICAgICAgICAgY2xhc3Mgc2hhbGwgYmUgcmVnaXN0 ZXJlZCBhcyBhIHByb2dyZXNzIGxpc3RlbmVyLg0KICAgICAgKiBAcmV0dXJuIAkJdGhlIHZhbHVl IHRvIGJlIHJldHVybmVkDQogICAgICAqLw0KICAgICBwdWJsaWMgYWJzdHJhY3QgT2JqZWN0IGNv bnN0cnVjdChQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKTsNCi0gICAgDQotICAgIA0K LSAgICAvKiogDQotICAgICAqIEluc3RhbnRpYXRlIGFuZCBpbml0aWFsaXplIGFuIGluc3RhbmNl IG9mIFByb2dyZXNzTW9uaXRvcldpbmRvdyANCi0gICAgICogDQorDQorDQorICAgIC8qKg0KKyAg ICAgKiBJbnN0YW50aWF0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBQcm9ncmVzc01v bml0b3JXaW5kb3cNCisgICAgICoNCiAgICAgICogQHJldHVybiAgICAgIGFuIGluc3RhbmNlIG9m IFByb2dyZXNzTW9uaXRvcldpbmRvdw0KICAgICAgKi8NCiAgICAgcHVibGljIGFic3RyYWN0IFBy b2dyZXNzTW9uaXRvciBpbml0UHJvZ3Jlc3NNb25pdG9yV2luZG93KCk7DQotICAgIA0KKw0KICAg ICAvKioNCi0gICAgICogVGhpcyBtZXRob2QgY2FsbHMgdGhlIGNvbnN0cnVjdCgpLCAgDQotICAg ICAqIA0KKyAgICAgKiBUaGlzIG1ldGhvZCBjYWxscyB0aGUgY29uc3RydWN0KCksDQorICAgICAq DQogICAgICAqIEByZXR1cm4JCXRoZSB2YWx1ZSB0byBiZSByZXR1cm5lZCBieSB0aGUgPGNvZGU+ Z2V0PC9jb2RlPiBtZXRob2QuDQogICAgICAqLw0KICAgICBwdWJsaWMgT2JqZWN0IGRvQ29uc3Ry dWN0KCkgew0KQEAgLTE0NCwyMiArMTQ1LDIyIEBADQogICAgICAgICAJCUN1cnNvci5nZXRQcmVk ZWZpbmVkQ3Vyc29yKEN1cnNvci5XQUlUX0NVUlNPUikpOw0KIA0KICAgICAgICAgT2JqZWN0IHJl dFZhbCA9IG51bGw7DQotICAgICAgICANCisNCiAgICAgICAgIC8vQ3JlYXRlIGEgdGltZXIuDQog ICAgICAgICB0aW1lciA9IG5ldyBUaW1lcigyNSwgbmV3IFRpbWVyTGlzdGVuZXIoKSk7DQogICAg ICAgICB0aW1lci5zdGFydCgpOw0KLSAgICAgICAgDQorDQogICAgIAl0cnkgew0KICAgICAJICAg IHJldFZhbCA9IGNvbnN0cnVjdChwbXcpOw0KICAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGV4Yykg ew0KIAkgICAgLy8gVE9ETzogVGhpcyBlcnJvciBuZWVkcyB0byBiZSByZXBvcnRlZCENCi0gICAg CSAgICBMT0cuZXJyb3IoIkVycm9yIHdoaWxlIGxvYWRpbmcgcHJvamVjdDogIiwgZXhjKTsNCisg ICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwgIkVycm9yIHdoaWxlIGxvYWRpbmcgcHJv amVjdDogIiwgZXhjKTsNCiAgICAgICAgIH0gZmluYWxseSB7DQogICAgICAgICAgICAgcG13LmNs b3NlKCk7DQogICAgICAgICB9DQogICAgICAgICByZXR1cm4gcmV0VmFsOw0KICAgICB9DQotICAg IA0KKw0KICAgICAvKioNCiAgICAgICogVGhlIGFjdGlvblBlcmZvcm1lZCBtZXRob2QgaW4gdGhp cyBjbGFzcw0KICAgICAgKiBpcyBjYWxsZWQgZWFjaCB0aW1lIHRoZSBUaW1lciAiZ29lcyBvZmYi Lg0KQEAgLTE3Myw3ICsxNzQsNyBAQA0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAg fQ0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIEFjdGl2YXRlIHRoZSBjYXBhYmlsaXRpZXMg b2YgZ2xhc3NwYW5lDQogICAgICAqLw0KQEAgLTE4OSw3ICsxOTAsNyBAQA0KICAgICAgICAgICAg IGdldEdsYXNzUGFuZSgpLnNldFZpc2libGUodHJ1ZSk7DQogICAgICAgICB9DQogICAgIH0NCi0g ICAgDQorDQogICAgIC8qKg0KICAgICAgKiBEZWFjdGl2YXRlIHRoZSBnbGFzc3BhbmUNCiAgICAg ICovDQpAQCAtMTk5LDcgKzIwMCw3IEBADQogICAgICAgICAgICAgZ2V0R2xhc3NQYW5lKCkuc2V0 VmlzaWJsZShmYWxzZSk7DQogICAgICAgICB9DQogICAgIH0NCi0gICAgDQorDQogICAgIC8qKg0K ICAgICAgKiBDYWxsZWQgb24gdGhlIGV2ZW50IGRpc3BhdGNoaW5nIHRocmVhZCAobm90IG9uIHRo ZSB3b3JrZXIgdGhyZWFkKQ0KICAgICAgKiBhZnRlciB0aGUgPGNvZGU+Y29uc3RydWN0PC9jb2Rl PiBtZXRob2QgaGFzIHJldHVybmVkLg0KQEAgLTIwOSw3ICsyMTAsNyBAQA0KICAgICAJQXJnb0Zy YW1lLmdldEZyYW1lKCkuc2V0Q3Vyc29yKEN1cnNvci5nZXRQcmVkZWZpbmVkQ3Vyc29yKA0KICAg ICAgICAgICAgICAgICBDdXJzb3IuREVGQVVMVF9DVVJTT1IpKTsNCiAgICAgfQ0KLSAgICANCisN CiAgICAgLyoqDQogICAgICAqIEdldHRlciBtZXRob2QgZm9yIHRoZSBnbGFzc1BhbmdlDQogICAg ICAqDQpAQCAtMjE4LDcgKzIxOSw3IEBADQogICAgIHByb3RlY3RlZCBHbGFzc1BhbmUgZ2V0R2xh c3NQYW5lKCkgew0KICAgICAgICAgcmV0dXJuIGdsYXNzUGFuZTsNCiAgICAgfQ0KLSAgICANCisN CiAgICAgLyoqDQogICAgICAqIFNldHRlciBtZXRob2QNCiAgICAgICoNCkBAIC0yMjcsNyArMjI4 LDcgQEANCiAgICAgcHJvdGVjdGVkIHZvaWQgc2V0R2xhc3NQYW5lKEdsYXNzUGFuZSBuZXdHbGFz c1BhbmUpIHsNCiAgICAgICAgIGdsYXNzUGFuZSA9IG5ld0dsYXNzUGFuZTsNCiAgICAgfQ0KLSAg ICANCisNCiAgICAgLyoqDQogICAgICAqIEEgbmV3IG1ldGhvZCB0aGF0IGludGVycnVwdHMgdGhl IHdvcmtlciB0aHJlYWQuICBDYWxsIHRoaXMgbWV0aG9kDQogICAgICAqIHRvIGZvcmNlIHRoZSB3 b3JrZXIgdG8gc3RvcCB3aGF0IGl0J3MgZG9pbmcuDQpAQCAtMjQxLDE0ICsyNDIsMTQgQEANCiAg ICAgfQ0KIA0KICAgICAvKioNCi0gICAgICogUmV0dXJuIHRoZSB2YWx1ZSBjcmVhdGVkIGJ5IHRo ZSA8Y29kZT5jb25zdHJ1Y3Q8L2NvZGU+IG1ldGhvZC4gIA0KKyAgICAgKiBSZXR1cm4gdGhlIHZh bHVlIGNyZWF0ZWQgYnkgdGhlIDxjb2RlPmNvbnN0cnVjdDwvY29kZT4gbWV0aG9kLg0KICAgICAg KiBSZXR1cm5zIG51bGwgaWYgZWl0aGVyIHRoZSBjb25zdHJ1Y3RpbmcgdGhyZWFkIG9yIHRoZSBj dXJyZW50DQogICAgICAqIHRocmVhZCB3YXMgaW50ZXJydXB0ZWQgYmVmb3JlIGEgdmFsdWUgd2Fz IHByb2R1Y2VkLg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHJldHVybiB0aGUgdmFsdWUg Y3JlYXRlZCBieSB0aGUgPGNvZGU+Y29uc3RydWN0PC9jb2RlPiBtZXRob2QNCiAgICAgICovDQog ICAgIHB1YmxpYyBPYmplY3QgZ2V0KCkgew0KLSAgICAgICAgd2hpbGUgKHRydWUpIHsgIA0KKyAg ICAgICAgd2hpbGUgKHRydWUpIHsNCiAgICAgICAgICAgICBUaHJlYWQgdCA9IHRocmVhZFZhci5n ZXQoKTsNCiAgICAgICAgICAgICBpZiAodCA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgIHJl dHVybiBnZXRWYWx1ZSgpOw0KQEAgLTI3MCwxMiArMjcxLDEyIEBADQogICAgICAqLw0KICAgICBw dWJsaWMgU3dpbmdXb3JrZXIoKSB7DQogICAgICAgICBmaW5hbCBSdW5uYWJsZSBkb0ZpbmlzaGVk ID0gbmV3IFJ1bm5hYmxlKCkgew0KLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsgDQot ICAgICAgICAgICAgICAgIGZpbmlzaGVkKCk7IA0KKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1 bigpIHsNCisgICAgICAgICAgICAgICAgZmluaXNoZWQoKTsNCiAgICAgICAgICAgICB9DQogICAg ICAgICB9Ow0KIA0KLSAgICAgICAgUnVubmFibGUgZG9Db25zdHJ1Y3QgPSBuZXcgUnVubmFibGUo KSB7IA0KKyAgICAgICAgUnVubmFibGUgZG9Db25zdHJ1Y3QgPSBuZXcgUnVubmFibGUoKSB7DQog ICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgew0KICAgICAgICAgICAgICAgICB0cnkgew0K ICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoZG9Db25zdHJ1Y3QoKSk7DQpAQCAtMjkwLDkg KzI5MSw5IEBADQogDQogICAgICAgICBUaHJlYWQgdCA9IG5ldyBUaHJlYWQoZG9Db25zdHJ1Y3Qp Ow0KICAgICAgICAgdGhyZWFkVmFyID0gbmV3IFRocmVhZFZhcih0KTsNCi0gICAgICAgIA0KKw0K ICAgICB9DQotICAgIA0KKw0KICAgICBwdWJsaWMgU3dpbmdXb3JrZXIoU3RyaW5nIHRocmVhZE5h bWUpIHsNCiAgICAgICAgIHRoaXMoKTsNCiAgICAgICAgIHRocmVhZFZhci5nZXQoKS5zZXROYW1l KHRocmVhZE5hbWUpOw0KDQpNb2RpZmllZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcv YXJnb3VtbC91aS9UYWJSZXN1bHRzLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9y Zy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJn b3VtbC91aS9UYWJSZXN1bHRzLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYm cjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFw cC9zcmMvb3JnL2FyZ291bWwvdWkvVGFiUmVzdWx0cy5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVu ay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL1RhYlJlc3VsdHMuamF2YQkyMDEy LTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAgKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0b3JzIC0gc2Vl IGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJl bG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21w YW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVz IHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNTIsNiArNTIsOCBA QA0KIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7DQogaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0K IGltcG9ydCBqYXZhLnV0aWwuU2V0Ow0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsN CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KIA0KIGltcG9ydCBqYXZheC5zd2lu Zy5Cb3JkZXJGYWN0b3J5Ow0KIGltcG9ydCBqYXZheC5zd2luZy5KTGFiZWw7DQpAQCAtNjMsNyAr NjUsNiBAQA0KIGltcG9ydCBqYXZheC5zd2luZy5ldmVudC5MaXN0U2VsZWN0aW9uRXZlbnQ7DQog aW1wb3J0IGphdmF4LnN3aW5nLmV2ZW50Lkxpc3RTZWxlY3Rpb25MaXN0ZW5lcjsNCiANCi1pbXBv cnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmFwcGxpY2F0 aW9uLmFwaS5BYnN0cmFjdEFyZ29KUGFuZWw7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmkxOG4uVHJh bnNsYXRvcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwubW9kZWwuTW9kZWw7DQpAQCAtOTMsNyArOTQs OCBAQA0KICAgICAvKioNCiAgICAgICogTG9nZ2VyLg0KICAgICAgKi8NCi0gICAgcHJpdmF0ZSBz dGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoVGFiUmVzdWx0cy5jbGFz cyk7DQorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KKyAgICAgICAgTG9n Z2VyLmdldExvZ2dlcihUYWJSZXN1bHRzLmNsYXNzLmdldE5hbWUoKSk7DQogDQogICAgIHByaXZh dGUgc3RhdGljIGludCBudW1KdW1wVG9SZWxhdGVkOw0KIA0KQEAgLTIyNiw3ICsyMjgsNyBAQA0K ICAgICAgICAgcmVsYXRlZExhYmVsLnNldFRleHQoDQogICAgICAgICAgICAgVHJhbnNsYXRvci5s b2NhbGl6ZSgiZGlhbG9nLnRhYnJlc3VsdHMucmVsYXRlZC1pdGVtcyIpKTsNCiAgICAgfQ0KLSAg ICANCisNCiAgICAgLyoNCiAgICAgICogQHNlZSBvcmcuYXJnb3VtbC51aS5BYnN0cmFjdEFyZ29K UGFuZWwjc3Bhd24oKQ0KICAgICAgKi8NCkBAIC0zMjcsNyArMzI5LDggQEANCiAJfQ0KIA0KIAlp ZiAoZCAhPSBudWxsKSB7DQotICAgICAgICAgICAgTE9HLmRlYnVnKCJnbyAiICsgc2VsICsgIiBp biAiICsgZC5nZXROYW1lKCkpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwNCisg ICAgICAgICAgICAgICAgICAgICJnbyB7MH0gaW4gezF9IiwgbmV3IE9iamVjdFtde3NlbCwgZC5n ZXROYW1lKCl9KTsNCiAgICAgICAgICAgICBUYXJnZXRNYW5hZ2VyLmdldEluc3RhbmNlKCkuc2V0 VGFyZ2V0KGQpOw0KICAgICAgICAgfQ0KIAlpZiAoTW9kZWwuZ2V0RmFjYWRlKCkuaXNBVGFnZ2Vk VmFsdWUoc2VsKSkgew0KQEAgLTM3OSw3ICszODIsNyBAQA0KIAlpZiAocmVsYXRlZFNob3duKSB7 DQogCSAgICBpbnQgcm93ID0gbHNlLmdldEZpcnN0SW5kZXgoKTsNCiAJICAgIE9iamVjdCBzZWwg PSByZXN1bHRzLmdldChyb3cpOw0KLQkgICAgTE9HLmRlYnVnKCJzZWxlY3RlZCAiICsgc2VsKTsN CisgICAgICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJzZWxlY3RlZCB7MH0iLCBzZWwpOw0K IAkgICAgcmVsYXRlZC5jbGVhcigpOw0KIAkgICAgRW51bWVyYXRpb24gZWxlbXMgPQ0KIAkJQ2hp bGRHZW5SZWxhdGVkLmdldFNpbmdsZXRvbigpLmdlbihzZWwpOw0KDQpNb2RpZmllZDogdHJ1bmsv c3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9UYWJUZXh0LmphdmENClVybDogaHR0 cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2Fy Z291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9UYWJUZXh0LmphdmE/dmlldz1kaWZmJnBhdGhy ZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRy dW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvVGFiVGV4dC5qYXZhCShvcmln aW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL1RhYlRl eHQuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJ ZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29udHJp YnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0 b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFu ZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNo IGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAt NDEsNiArNDEsOCBAQA0KIGltcG9ydCBqYXZhLmF3dC5Cb3JkZXJMYXlvdXQ7DQogaW1wb3J0IGph dmEuYXd0LkZvbnQ7DQogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsNCitpbXBvcnQgamF2 YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsN CiANCiBpbXBvcnQgamF2YXguc3dpbmcuSlNjcm9sbFBhbmU7DQogaW1wb3J0IGphdmF4LnN3aW5n LkpUZXh0QXJlYTsNCkBAIC00OSw3ICs1MSw2IEBADQogaW1wb3J0IGphdmF4LnN3aW5nLmV2ZW50 LkRvY3VtZW50RXZlbnQ7DQogaW1wb3J0IGphdmF4LnN3aW5nLmV2ZW50LkRvY3VtZW50TGlzdGVu ZXI7DQogDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KIGltcG9ydCBvcmcuYXJn b3VtbC5hcHBsaWNhdGlvbi5hcGkuQWJzdHJhY3RBcmdvSlBhbmVsOw0KIGltcG9ydCBvcmcuYXJn b3VtbC5zd2luZ2V4dC5VcEFycm93SWNvbjsNCiBpbXBvcnQgb3JnLmFyZ291bWwudWkudGFyZ2V0 bWFuYWdlci5UYXJnZXRFdmVudDsNCkBAIC03Nyw3ICs3OCw3IEBADQogICAgIC8qKg0KICAgICAg KiBMb2dnZXIuDQogICAgICAqLw0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9H ID0gTG9nZ2VyLmdldExvZ2dlcihUYWJUZXh0LmNsYXNzKTsNCisgICAgcHJpdmF0ZSBzdGF0aWMg ZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoVGFiVGV4dC5jbGFzcy5nZXROYW1l KCkpOw0KIA0KICAgICAvKioNCiAgICAgICogQ3JlYXRlIGEgdGV4dCB0YWIgd2l0aG91dCBhIHRv b2xiYXIuDQpAQCAtMjAxLDcgKzIwMiw3IEBADQogICAgICAgICBpZiAocyA9PSBudWxsKSB7DQog ICAgICAgICAgICAgcyA9ICIobnVsbCkiOw0KICAgICAgICAgfQ0KLSAgICAgICAgTE9HLmRlYnVn KCJwYXJzaW5nIHRleHQ6IiArIHMpOw0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAicGFy c2luZyB0ZXh0OiB7MH0iLCBzKTsNCiAgICAgfQ0KIA0KICAgICAvKg0KDQpNb2RpZmllZDogdHJ1 bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9UcmVlTW9kZWxDb21wb3NpdGUu amF2YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3Vt bC90cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL1RyZWVNb2RlbENvbXBv c2l0ZS5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdv dW1sL3VpL1RyZWVNb2RlbENvbXBvc2l0ZS5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMv YXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL1RyZWVNb2RlbENvbXBvc2l0ZS5qYXZhCTIw MTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQogLyogJElkJA0KICAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBDb250cmlidXRvcnMgLSBz ZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiBDb250cmlidXRvcnMgLSBzZWUg YmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2Nv bXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5p ZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCkBAIC0zOCwxMSArMzgs MTIgQEANCiANCiBwYWNrYWdlIG9yZy5hcmdvdW1sLnVpOw0KIA0KK2ltcG9ydCBqYXZhLnV0aWwu bG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KKw0KIGlt cG9ydCBqYXZheC5zd2luZy50cmVlLlRyZWVNb2RlbDsNCiBpbXBvcnQgamF2YXguc3dpbmcudHJl ZS5UcmVlUGF0aDsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQotDQogLyoq DQogICogVGhpcyBjbGFzcyBpcyB0aGUgVHJlZU1vZGVsIGZvciB0aGUgbmF2aWdhdG9yIGFuZCB0 b2RvIGxpc3QgcGFuZWxzLjxwPg0KICAqDQpAQCAtNTMsNyArNTQsNyBAQA0KIHB1YmxpYyBjbGFz cyBUcmVlTW9kZWxDb21wb3NpdGUgZXh0ZW5kcyBUcmVlTW9kZWxTdXBwb3J0IGltcGxlbWVudHMg VHJlZU1vZGVsIHsNCiANCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9DQot ICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKFRyZWVNb2RlbENvbXBvc2l0ZS5jbGFzcyk7DQorICAg ICAgICBMb2dnZXIuZ2V0TG9nZ2VyKFRyZWVNb2RlbENvbXBvc2l0ZS5jbGFzcy5nZXROYW1lKCkp Ow0KIA0KICAgICAvKiogVGhlIHJvb3Qgb2YgdGhlIG1vZGVsLiAqLw0KICAgICBwcml2YXRlIE9i amVjdCByb290Ow0KQEAgLTExMyw3ICsxMTQsNyBAQA0KICAgICAgICAgICAgIH0NCiAgICAgICAg ICAgICBjaGlsZENvdW50ICs9IHRtLmdldENoaWxkQ291bnQocGFyZW50KTsNCiAgICAgICAgIH0N Ci0gICAgICAgIExPRy5kZWJ1ZygiY2hpbGQgbm90IGZvdW5kISIpOw0KKyAgICAgICAgTE9HLmxv ZyhMZXZlbC5GSU5FLCAiY2hpbGQgbm90IGZvdW5kISIpOw0KIA0KICAgICAgICAgLy9UaGUgY2hp bGQgaXMgc29tZXRpbWVzIG5vdCBmb3VuZCB3aGVuIHRoZSB0cmVlIGlzIGJlaW5nIHVwZGF0ZWQN CiAgICAgICAgIHJldHVybiAtMTsNCkBAIC0xMzUsMTEgKzEzNiwxMSBAQA0KICAgICAvKg0KICAg ICAgKiBAc2VlIGphdmF4LnN3aW5nLnRyZWUuVHJlZU1vZGVsI3ZhbHVlRm9yUGF0aENoYW5nZWQo amF2YXguc3dpbmcudHJlZS5UcmVlUGF0aCwgamF2YS5sYW5nLk9iamVjdCkNCiAgICAgICovDQot ICAgIHB1YmxpYyB2b2lkIHZhbHVlRm9yUGF0aENoYW5nZWQoVHJlZVBhdGggcGF0aCwgT2JqZWN0 IG5ld1ZhbHVlKSB7IA0KKyAgICBwdWJsaWMgdm9pZCB2YWx1ZUZvclBhdGhDaGFuZ2VkKFRyZWVQ YXRoIHBhdGgsIE9iamVjdCBuZXdWYWx1ZSkgew0KICAgICAgICAgLy8gIEVtcHR5IGltcGxlbWVu dGF0aW9uIC0gbm90IHVzZWQuDQogICAgIH0NCiANCi0gICAgDQorDQogICAgIC8qKg0KICAgICAg KiBAcGFyYW0gciB0aGUgcm9vdCBvZiB0aGUgbW9kZWwNCiAgICAgICovDQoNCk1vZGlmaWVkOiB0 cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL1pvb21TbGlkZXJCdXR0b24u amF2YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3Vt bC90cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL1pvb21TbGlkZXJCdXR0 b24uamF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3Vt bC91aS9ab29tU2xpZGVyQnV0dG9uLmphdmEJKG9yaWdpbmFsKQ0KKysrIHRydW5rL3NyYy9hcmdv dW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvWm9vbVNsaWRlckJ1dHRvbi5qYXZhCTIwMTItMTIt MzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQogLyogJElkJA0KICAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVs b3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cN CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlp bmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhp cyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCkBAIC02NSw5ICs2NSw5IEBADQog DQogaW1wb3J0IG9yZy5hcmdvdW1sLmFwcGxpY2F0aW9uLmhlbHBlcnMuUmVzb3VyY2VMb2FkZXJX cmFwcGVyOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5pMThuLlRyYW5zbGF0b3I7DQotaW1wb3J0IG9y Zy50aWdyaXMuc3dpZGdldHMuUG9wdXBCdXR0b247DQogaW1wb3J0IG9yZy50aWdyaXMuZ2VmLmJh c2UuRWRpdG9yOw0KIGltcG9ydCBvcmcudGlncmlzLmdlZi5iYXNlLkdsb2JhbHM7DQoraW1wb3J0 IG9yZy50aWdyaXMuc3dpZGdldHMuUG9wdXBCdXR0b247DQogDQogLyoqDQogICogQSBidXR0b24g dGhhdCBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIHpvb20gbWFnbmlmaWNhdGlvbiBvZiB0aGUg Y3VycmVudA0KDQpNb2RpZmllZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3Vt bC91aS9jbWQvQWN0aW9uR290b0RpYWdyYW0uamF2YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50aWdy aXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29y Zy9hcmdvdW1sL3VpL2NtZC9BY3Rpb25Hb3RvRGlhZ3JhbS5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2 PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVu ay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL2NtZC9BY3Rpb25Hb3RvRGlhZ3Jh bS5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdv dW1sL3VpL2NtZC9BY3Rpb25Hb3RvRGlhZ3JhbS5qYXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgw MA0KQEAgLTEsNiArMSw2IEBADQogLyogJElkJA0KICAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAq IENvcHlyaWdodCAoYykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmln aHQgKGMpIDIwMDktMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRz IHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQog ICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJs aWMgTGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24s IGFuZCBpcyBhdmFpbGFibGUgYXQNCkBAIC00Nyw5ICs0Nyw5IEBADQogaW1wb3J0IG9yZy5hcmdv dW1sLmtlcm5lbC5Qcm9qZWN0Ow0KIGltcG9ydCBvcmcuYXJnb3VtbC5rZXJuZWwuUHJvamVjdE1h bmFnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLnVpLkdvdG9EaWFsb2c7DQoraW1wb3J0IG9yZy5h cmdvdW1sLnVpLlVuZG9hYmxlQWN0aW9uOw0KIGltcG9ydCBvcmcuYXJnb3VtbC51aS50YXJnZXRt YW5hZ2VyLlRhcmdldE1hbmFnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLnVtbC5kaWFncmFtLkFy Z29EaWFncmFtOw0KLWltcG9ydCBvcmcuYXJnb3VtbC51aS5VbmRvYWJsZUFjdGlvbjsNCiANCiAv Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vDQogLy8gaXRlbXMgb24gdmlldyBtZW51DQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJn b3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL2NtZC9DbWRTZXRQcmVmZXJyZWRTaXplLmphdmEN ClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1 bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9jbWQvQ21kU2V0UHJlZmVycmVk U2l6ZS5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdv dW1sL3VpL2NtZC9DbWRTZXRQcmVmZXJyZWRTaXplLmphdmEJKG9yaWdpbmFsKQ0KKysrIHRydW5r L3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvY21kL0NtZFNldFByZWZlcnJlZFNp emUuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJ ZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29udHJp YnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0 b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFu ZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNo IGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAt NDEsMTQgKzQxLDEzIEBADQogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQogaW1wb3J0IGph dmEudXRpbC5MaXN0Ow0KIA0KK2ltcG9ydCBvcmcuYXJnb3VtbC5pMThuLlRyYW5zbGF0b3I7DQog aW1wb3J0IG9yZy50aWdyaXMuZ2VmLmJhc2UuQ21kOw0KIGltcG9ydCBvcmcudGlncmlzLmdlZi5i YXNlLkVkaXRvcjsNCiBpbXBvcnQgb3JnLnRpZ3Jpcy5nZWYuYmFzZS5HbG9iYWxzOw0KIGltcG9y dCBvcmcudGlncmlzLmdlZi5iYXNlLlNlbGVjdGlvbk1hbmFnZXI7DQogaW1wb3J0IG9yZy50aWdy aXMuZ2VmLnByZXNlbnRhdGlvbi5GaWc7DQogDQotaW1wb3J0IG9yZy5hcmdvdW1sLmkxOG4uVHJh bnNsYXRvcjsNCi0NCiANCiAvKioNCiAgKiBBIGNvbW1hbmQgdG8gc2V0IHNlbGVjdGVkIGZpZ3Mg dG8gdGhlaXIgbWluaW11bSBzaXplLiA8cD4NCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1s LWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvY21kL0dlbmVyaWNBcmdvTWVudUJhci5qYXZhDQpVcmw6 IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5rL3Ny Yy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvY21kL0dlbmVyaWNBcmdvTWVudUJhci5q YXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3Vp L2NtZC9HZW5lcmljQXJnb01lbnVCYXIuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2Fy Z291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9jbWQvR2VuZXJpY0FyZ29NZW51QmFyLmphdmEJ MjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMSw2ICsxLDYgQEANCiAvKiAkSWQkDQogICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgQ29udHJpYnV0 b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3Jz IC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0 aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFj Y29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNDQs NiArNDQsOCBAQA0KIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KIGltcG9ydCBqYXZhLnV0 aWwuQ29sbGVjdGlvbjsNCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRp bC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQog aW1wb3J0IGphdmF4LnN3aW5nLkFjdGlvbjsNCiBpbXBvcnQgamF2YXguc3dpbmcuQnV0dG9uR3Jv dXA7DQpAQCAtNTUsNyArNTcsNiBAQA0KIGltcG9ydCBqYXZheC5zd2luZy5LZXlTdHJva2U7DQog aW1wb3J0IGphdmF4LnN3aW5nLlN3aW5nVXRpbGl0aWVzOw0KIA0KLWltcG9ydCBvcmcuYXBhY2hl LmxvZzRqLkxvZ2dlcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwuYXBwbGljYXRpb24uaGVscGVycy5S ZXNvdXJjZUxvYWRlcldyYXBwZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmNvZ25pdGl2ZS5jcml0 aWNzLnVpLkFjdGlvbk9wZW5Dcml0aWNzOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5jb2duaXRpdmUu dWkuQWN0aW9uQXV0b0NyaXRpcXVlOw0KQEAgLTEwMSw0OCArMTAyLDQ4IEBADQogaW1wb3J0IG9y Zy50aWdyaXMudG9vbGJhci5Ub29sQmFyRmFjdG9yeTsNCiANCiAvKioNCi0gKiBHZW5lcmljQXJn b01lbnVCYXIgZGVmaW5lcyB0aGUgbWVudSBiYXIgZm9yIGFsbCBvcGVyYXRpbmcgc3lzdGVtcyB3 aGljaCBkbyANCisgKiBHZW5lcmljQXJnb01lbnVCYXIgZGVmaW5lcyB0aGUgbWVudSBiYXIgZm9y IGFsbCBvcGVyYXRpbmcgc3lzdGVtcyB3aGljaCBkbw0KICAqIG5vdCBleHBsaWNpdGx5IGFzayBm b3IgYSBkaWZmZXJlbnQga2luZCBvZiBtZW51IGJhciwgc3VjaCBhcyBNYWMgT1MgWC4NCiAgKiA8 cD4NCi0gKiANCisgKg0KICAqIE1lbnUncyBhbmQgdGhlIG1uZW1vbmljcyBvZiBtZW51J3MgYW5k IHRoZSBtZW51aXRlbXMgYXJlIHNlcGFyYXRlZCBpbiB0aGUNCiAgKiBQcm9wZXJ0eVJlc291cmNl QnVuZGxlIDxlbT5tZW51LnByb3BlcnRpZXM8L2VtPi4NCiAgKiA8cD4NCi0gKiANCisgKg0KICAq IG1lbnUgaXRlbXMgYXJlIHNlcGFyYXRlZCBpbiB0aGUgUHJvcGVydHlSZXNvdXJjZUJ1bmRsZQ0K ICAqIDxlbT5hY3Rpb24ucHJvcGVydGllczwvZW0+Lg0KICAqIDxwPg0KLSAqIA0KKyAqDQogICog VGhlIGtleSdzIGluIG1lbnUucHJvcGVydGllcyBoYXZlIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJl Og0KLSAqIA0KKyAqDQogICogPHByZT4NCiAgKiAgIG1lbnU6ICAgICAgICAgICAgICAgICAgICBb ZmlsZV0uW25hbWUgb2YgbWVudV0NCiAgKiAgICBlLmc6ICAgICAgICAgICAgICAgICAgICBtZW51 LmZpbGUNCi0gKiANCisgKg0KICAqICAgbW5lbW9uaWNzIG9mIG1lbnUnczogICAgIFtmaWxlXS5b bmFtZSBvZiBtZW51XS5tbmVtb25pYw0KICAqICAgIGUuZzogICAgICAgICAgICAgICAgICAgIG1l bnUuZmlsZS5tbmVtb25pYw0KLSAqIA0KKyAqDQogICogICBtbmVtb25pY3Mgb2YgbWVudWl0ZW1z OiAgW2ZpbGVdLltmbGFnIGZvciBpdGVtXS5bbmFtZSBvZiBtZW51aXRlbV0ubW5lbW9uaWMNCiAg KiAgICBlLmc6ICAgICAgICAgICAgICAgICAgICBtZW51Lml0ZW0ubmV3Lm1uZW1vbmljDQogICog PC9wcmU+DQotICogDQorICoNCiAgKiBUT0RPOiBBZGQgcmVnaXN0cmF0aW9uIGZvciBuZXcgbWVu dSBpdGVtcy4NCiAgKiBAZGVwcmVjYXRlZCBpbiAwLjI5LjIgYnkgQm9iIFRhcmxpbmcuIFRoaXMg Y2xhc3Mgd2lsbCBiZSBtb3ZlZCBhbmQgbWFkZQ0KICAqIHByaXZhdGUgaW4gZnV0dXJlLiBVc2Ug TWVudUJhckZhY3RvcnkuY3JlYXRlQXBwbGljYXRpb25NZW51QmFyDQogICovDQogcHVibGljIGNs YXNzIEdlbmVyaWNBcmdvTWVudUJhciBleHRlbmRzIEpNZW51QmFyIGltcGxlbWVudHMNCiAgICAg ICAgIFRhcmdldExpc3RlbmVyIHsNCi0gICAgDQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExv Z2dlciBMT0cgPSANCi0gICAgICAgIExvZ2dlci5nZXRMb2dnZXIoR2VuZXJpY0FyZ29NZW51QmFy LmNsYXNzKTsNCisNCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9DQorICAg ICAgICBMb2dnZXIuZ2V0TG9nZ2VyKEdlbmVyaWNBcmdvTWVudUJhci5jbGFzcy5nZXROYW1lKCkp Ow0KIA0KICAgICBwcml2YXRlIHN0YXRpYyBMaXN0PEpNZW51PiBtb2R1bGVNZW51cyA9IG5ldyBB cnJheUxpc3Q8Sk1lbnU+KCk7DQogDQotICAgIHByaXZhdGUgc3RhdGljIExpc3Q8QWN0aW9uPiBt b2R1bGVDcmVhdGVEaWFncmFtQWN0aW9ucyA9IA0KKyAgICBwcml2YXRlIHN0YXRpYyBMaXN0PEFj dGlvbj4gbW9kdWxlQ3JlYXRlRGlhZ3JhbUFjdGlvbnMgPQ0KICAgICAgICAgbmV3IEFycmF5TGlz dDxBY3Rpb24+KCk7DQotICAgIA0KKw0KICAgICBwcml2YXRlIENvbGxlY3Rpb248QWN0aW9uPiBk aXNhYmxlYWJsZUFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PEFjdGlvbj4oKTsNCi0gICAgDQorDQog ICAgIC8qKg0KICAgICAgKiBUaGUgem9vbSBmYWN0b3IgLSBkZWZhdWx0cyB0byA5MCUvMTEwJQ0K ICAgICAgKi8NCkBAIC0yMjYsNyArMjI3LDcgQEANCiAgICAgcHJpdmF0ZSBBY3Rpb24gbmF2aWdh dGVUYXJnZXRGb3J3YXJkQWN0aW9uOw0KIA0KICAgICBwcml2YXRlIEFjdGlvbiBuYXZpZ2F0ZVRh cmdldEJhY2tBY3Rpb247DQotICAgIA0KKw0KICAgICAvLyBSZWZlcmVuY2VzIHRvIGFjdGlvbnMg dGhhdCB3ZSBuZWVkIGZvciBNYWMgaGFjaw0KICAgICBwcml2YXRlIEFjdGlvblNldHRpbmdzIHNl dHRpbmdzQWN0aW9uOw0KICAgICBwcml2YXRlIEFjdGlvbkFib3V0QXJnb1VNTCBhYm91dEFjdGlv bjsNCkBAIC0yNTEsMTAgKzI1MiwxMCBAQA0KICAgICAgICAgZGlzYWJsZWFibGVBY3Rpb25zLmFk ZChuYXZpZ2F0ZVRhcmdldEJhY2tBY3Rpb24pOw0KICAgICAgICAgbGF5b3V0QWN0aW9uID0gbmV3 IEFjdGlvbkxheW91dCgpOw0KICAgICAgICAgZGlzYWJsZWFibGVBY3Rpb25zLmFkZChsYXlvdXRB Y3Rpb24pOw0KLSAgICAgICAgDQorDQogICAgICAgICBUYXJnZXRNYW5hZ2VyLmdldEluc3RhbmNl KCkuYWRkVGFyZ2V0TGlzdGVuZXIodGhpcyk7DQogICAgICAgICAvKiBUaGlzIG5leHQgbGluZSBh ZGRlZCB0byBzb2x2ZSBpc3N1ZSA1NzU1Lg0KLSAgICAgICAgICogQnJpbmcgdGhlIGVuYWJsZWQv ZGlzYWJsZWQgc3RhdGUgb2YgdGhlIGFjdGlvbnMgaW4gbGluZSB3aXRoIHRoZSANCisgICAgICAg ICAqIEJyaW5nIHRoZSBlbmFibGVkL2Rpc2FibGVkIHN0YXRlIG9mIHRoZSBhY3Rpb25zIGluIGxp bmUgd2l0aCB0aGUNCiAgICAgICAgICAqIGxhc3QgdGFyZ2V0IGNoYW5nZSB0aGF0IGhhcHBlbmVk IGJlZm9yZSB3ZSByZWdpc3RlcmVkIGFzIGxpc3RlbmVyLiAqLw0KICAgICAgICAgc2V0VGFyZ2V0 KCk7DQogICAgIH0NCkBAIC0yNjMsNyArMjY0LDcgQEANCiAgICAgICogVGhpcyBzaG91bGQgYmUg YSB1c2VyIHNwZWNpZmllZCBvcHRpb24uIE5ldyBsYXdzIGZvciBoYW5kaWNhcHBlZCBwZW9wbGUN CiAgICAgICogd2hvIGNhbm5vdCB1c2UgdGhlIG1vdXNlIHJlcXVpcmUgc29mdHdhcmUgZGV2ZWxv cGVycyBpbiBVUyB0byBtYWtlIGFsbA0KICAgICAgKiBjb21wb25lbnRzIG9mIFVzZXIgaW50ZXJm YWNlIGFjY2Vzc2libGUgdGhyb3VnaCBrZXlib2FyZA0KLSAgICAgKiANCisgICAgICoNCiAgICAg ICogQHBhcmFtIGl0ZW0NCiAgICAgICogICAgICAgICAgICBpcyB0aGUgSk1lbnVJdGVtIHRvIGRv IHRoaXMgZm9yLg0KICAgICAgKiBAcGFyYW0ga2V5DQpAQCAtMjkzLDcgKzI5NCw3IEBADQogICAg IHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIG1lbnVMb2NhbGl6ZShTdHJpbmcga2V5KSB7 DQogICAgICAgICByZXR1cm4gVHJhbnNsYXRvci5sb2NhbGl6ZShNRU5VICsgcHJlcGFyZUtleShr ZXkpKTsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIEBwYXJhbSBrZXkgdGhl IGtleSB0byBsb2NhbGl6ZQ0KICAgICAgKiBAcmV0dXJuIHRoZSBsb2NhbGl6ZWQgc3RyaW5nDQpA QCAtMzE2LDcgKzMxNyw3IEBADQogICAgICAgICBpbml0TWVudVRvb2xzKCk7DQogICAgICAgICBp bml0TWVudUhlbHAoKTsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgcHJpdmF0ZSB2b2lkIGluaXRN b2R1bGVzVUkgKCkgew0KICAgICAgICAgaW5pdE1vZHVsZXNNZW51cygpOw0KICAgICAgICAgaW5p dE1vZHVsZXNBY3Rpb25zKCk7DQpAQCAtNDA3LDE0ICs0MDgsMTQgQEANCiAgICAgICAgIC8vIGFk ZCBsYXN0IHJlY2VudGx5IHVzZWQgbGlzdCBfYmVmb3JlXyBleGl0IG1lbnUNCiAgICAgICAgIG1y dUxpc3QgPSBuZXcgTGFzdFJlY2VudGx5VXNlZE1lbnVMaXN0KGZpbGUpOw0KIA0KLSAgICAgICAg Ly8gYW5kIGV4aXQgbWVudSBlbnRyeSBzdGFydGluZyB3aXRoIHNlcGFyYXRvci4gDQorICAgICAg ICAvLyBhbmQgZXhpdCBtZW51IGVudHJ5IHN0YXJ0aW5nIHdpdGggc2VwYXJhdG9yLg0KICAgICAg ICAgZXhpdEFjdGlvbiA9IG5ldyBBY3Rpb25FeGl0KCk7DQogICAgICAgICBpZiAoIU9zVXRpbC5p c01hY09TWCgpKSB7DQogICAgICAgICAgICAgZmlsZS5hZGRTZXBhcmF0b3IoKTsNCiAgICAgICAg ICAgICBKTWVudUl0ZW0gZXhpdEl0ZW0gPSBmaWxlLmFkZChleGl0QWN0aW9uKTsNCiAgICAgICAg ICAgICBzZXRNbmVtb25pYyhleGl0SXRlbSwgIkV4aXQiKTsNCi0gICAgICAgICAgICAvKiBUaGUg IkNsb3NlIHdpbmRvdyIgc2hvcnRjdXQgKEFMVCtGNCkgYWN0dWFsbHkgY2FuJ3QgDQotICAgICAg ICAgICAgICogYmUgcmVnaXN0ZXJlZCBhcyBhIHNob3J0Y3V0LCANCisgICAgICAgICAgICAvKiBU aGUgIkNsb3NlIHdpbmRvdyIgc2hvcnRjdXQgKEFMVCtGNCkgYWN0dWFsbHkgY2FuJ3QNCisgICAg ICAgICAgICAgKiBiZSByZWdpc3RlcmVkIGFzIGEgc2hvcnRjdXQsDQogICAgICAgICAgICAgICog YmVjYXVzZSBpdCBjbG9zZXMgdGhlIGNvbmZpZ3VyYXRpb24gZGlhbG9nISAqLw0KICAgICAgICAg ICAgIGV4aXRJdGVtLnNldEFjY2VsZXJhdG9yKEtleVN0cm9rZS5nZXRLZXlTdHJva2UoS2V5RXZl bnQuVktfRjQsDQogICAgICAgICAgICAgICAgICAgICBJbnB1dEV2ZW50LkFMVF9NQVNLKSk7DQpA QCAtNDMzLDcgKzQzNCw3IEBADQogICAgICAgICBlZGl0ID0gYWRkKG5ldyBKTWVudShtZW51TG9j YWxpemUoIkVkaXQiKSkpOw0KICAgICAgICAgc2V0TW5lbW9uaWMoZWRpdCwgIkVkaXQiKTsNCiAN Ci0vLyBDb21tZW50IG91dCB3aGVuIHdlIGFyZSByZWFkeSB0byByZWxlYXNlIHVuZG8vcmVkbyAg ICAgICAgDQorLy8gQ29tbWVudCBvdXQgd2hlbiB3ZSBhcmUgcmVhZHkgdG8gcmVsZWFzZSB1bmRv L3JlZG8NCiAvLyAgICAgICAgSk1lbnVJdGVtIHVuZG9JdGVtID0gZWRpdC5hZGQoDQogLy8gICAg ICAgICAgICAgICAgUHJvamVjdEFjdGlvbnMuZ2V0SW5zdGFuY2UoKS5nZXRVbmRvQWN0aW9uKCkp Ow0KIC8vICAgICAgICBzZXRNbmVtb25pYyh1bmRvSXRlbSwgIlVuZG8iKTsNCkBAIC01NDYsMTcg KzU0NywxNyBAQA0KICAgICAgICAgc2V0TW5lbW9uaWMoem9vbVJlc2V0LCAiWm9vbSBSZXNldCIp Ow0KICAgICAgICAgU2hvcnRjdXRNZ3IuYXNzaWduQWNjZWxlcmF0b3Ioem9vbVJlc2V0LCBTaG9y dGN1dE1nci5BQ1RJT05fWk9PTV9SRVNFVCk7DQogDQotICAgICAgICBab29tQWN0aW9uUHJveHkg em9vbUluQWN0aW9uID0gDQorICAgICAgICBab29tQWN0aW9uUHJveHkgem9vbUluQWN0aW9uID0N CiAgICAgICAgICAgICBuZXcgWm9vbUFjdGlvblByb3h5KCgxLjApIC8gKFpPT01fRkFDVE9SKSk7 DQogICAgICAgICBKTWVudUl0ZW0gem9vbUluID0gem9vbS5hZGQoem9vbUluQWN0aW9uKTsNCiAg ICAgICAgIHNldE1uZW1vbmljKHpvb21JbiwgIlpvb20gSW4iKTsNCiAgICAgICAgIFNob3J0Y3V0 TWdyLmFzc2lnbkFjY2VsZXJhdG9yKHpvb21JbiwgU2hvcnRjdXRNZ3IuQUNUSU9OX1pPT01fSU4p Ow0KIA0KICAgICAgICAgdmlldy5hZGRTZXBhcmF0b3IoKTsNCi0gICAgICAgIA0KKw0KICAgICAg ICAgSk1lbnUgZ3JpZCA9IChKTWVudSkgdmlldy5hZGQobmV3IEpNZW51KG1lbnVMb2NhbGl6ZSgi QWRqdXN0IEdyaWQiKSkpOw0KICAgICAgICAgc2V0TW5lbW9uaWMoZ3JpZCwgIkFkanVzdCBHcmlk Iik7DQotICAgICAgICBMaXN0PEFjdGlvbj4gZ3JpZEFjdGlvbnMgPSANCisgICAgICAgIExpc3Q8 QWN0aW9uPiBncmlkQWN0aW9ucyA9DQogICAgICAgICAgICAgQWN0aW9uQWRqdXN0R3JpZC5jcmVh dGVBZGp1c3RHcmlkQWN0aW9ucyhmYWxzZSk7DQogICAgICAgICBCdXR0b25Hcm91cCBncm91cEdy aWQgPSBuZXcgQnV0dG9uR3JvdXAoKTsNCiAgICAgICAgIEFjdGlvbkFkanVzdEdyaWQuc2V0R3Jv dXAoZ3JvdXBHcmlkKTsNCkBAIC02MDcsNyArNjA4LDcgQEANCiAgICAgICogYnVpbGQgdG9nZXRo ZXIgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIHNhbWUgaXRlbXMgYXJlIHByZXNlbnQgaW4gYm90aCwg YW5kDQogICAgICAqIGluIHRoZSBzYW1lIHNlcXVlbmNlLg0KICAgICAgKiA8cD4NCi0gICAgICog DQorICAgICAqDQogICAgICAqIFRoZSBzZXF1ZW5jZSBvZiB0aGVzZSBpdGVtcyB3YXMgZGV0ZXJt aW5lZCBieSBpc3N1ZSAxODIxLg0KICAgICAgKi8NCiAgICAgcHJvdGVjdGVkIHZvaWQgaW5pdE1l bnVDcmVhdGUoKSB7DQpAQCAtNjM0LDcgKzYzNSw3IEBADQogICAgICAgICB0b29sYmFyVG9vbHMu YWRkKChuZXcgQWN0aW9uU2VxdWVuY2VEaWFncmFtKCkpKTsNCiAgICAgICAgIFNob3J0Y3V0TWdy LmFzc2lnbkFjY2VsZXJhdG9yKHNlcXVlbnpEaWFncmFtLA0KICAgICAgICAgICAgICAgICBTaG9y dGN1dE1nci5BQ1RJT05fU0VRVUVOQ0VfRElBR1JBTSk7DQotICAgICAgICANCisNCiAgICAgICAg IEpNZW51SXRlbSBjb2xsYWJvcmF0aW9uRGlhZ3JhbSA9DQogICAgICAgICAgICAgY3JlYXRlRGlh Z3JhbU1lbnUuYWRkKG5ldyBBY3Rpb25Db2xsYWJvcmF0aW9uRGlhZ3JhbSgpKTsNCiAgICAgICAg IHNldE1uZW1vbmljKGNvbGxhYm9yYXRpb25EaWFncmFtLCAiQ29sbGFib3JhdGlvbiBEaWFncmFt Iik7DQpAQCAtNjYzLDcgKzY2NCw3IEBADQogICAgICAgICBTaG9ydGN1dE1nci5hc3NpZ25BY2Nl bGVyYXRvcihkZXBsb3ltZW50RGlhZ3JhbSwNCiAgICAgICAgICAgICAgICAgU2hvcnRjdXRNZ3Iu QUNUSU9OX0RFUExPWU1FTlRfRElBR1JBTSk7DQogDQotICAgICAgICBjcmVhdGVEaWFncmFtVG9v bGJhciA9IA0KKyAgICAgICAgY3JlYXRlRGlhZ3JhbVRvb2xiYXIgPQ0KICAgICAgICAgICAgIChu ZXcgVG9vbEJhckZhY3RvcnkodG9vbGJhclRvb2xzKSkuY3JlYXRlVG9vbEJhcigpOw0KICAgICAg ICAgY3JlYXRlRGlhZ3JhbVRvb2xiYXIuc2V0TmFtZSgNCiAgICAgICAgICAgICAgICAgVHJhbnNs YXRvci5sb2NhbGl6ZSgibWlzYy50b29sYmFyLmNyZWF0ZS1kaWFncmFtIikpOw0KQEAgLTY5Nywx NiArNjk4LDE2IEBADQogICAgICAgICBpbml0RGlzdHJpYnV0ZU1lbnUoZGlzdHJpYnV0ZSk7DQog ICAgICAgICBpbml0UmVvcmRlck1lbnUocmVvcmRlcik7DQogICAgIH0NCi0gICAgDQorDQogICAg IC8qKg0KICAgICAgKiBJbml0aWFsaXplIHN1Ym1lbnVzIG9mIHRoZSBBbGlnbiBtZW51Lg0KLSAg ICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIGFsaWduDQogICAgICAqICAgICAgICAgICAg dGhlIEFsaWduIG1lbnUNCiAgICAgICovDQogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgaW5pdEFs aWduTWVudShKTWVudSBhbGlnbikgew0KICAgICAgICAgQWxpZ25BY3Rpb24gYSA9IG5ldyBBbGln bkFjdGlvbihBbGlnbkFjdGlvbi5BTElHTl9UT1BTKTsNCi0gICAgICAgIGEucHV0VmFsdWUoQWN0 aW9uLlNNQUxMX0lDT04sIA0KKyAgICAgICAgYS5wdXRWYWx1ZShBY3Rpb24uU01BTExfSUNPTiwN CiAgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkZXJXcmFwcGVyLmxvb2t1cEljb24oIkFsaWdu VG9wcyIpKTsNCiAgICAgICAgIEpNZW51SXRlbSBhbGlnblRvcHMgPSBhbGlnbi5hZGQoYSk7DQog ICAgICAgICBzZXRNbmVtb25pYyhhbGlnblRvcHMsICJhbGlnbiB0b3BzIik7DQpAQCAtNzE0LDcg KzcxNSw3IEBADQogDQogICAgICAgICBhID0gbmV3IEFsaWduQWN0aW9uKA0KICAgICAgICAgICAg ICAgICBBbGlnbkFjdGlvbi5BTElHTl9CT1RUT01TKTsNCi0gICAgICAgIGEucHV0VmFsdWUoQWN0 aW9uLlNNQUxMX0lDT04sIA0KKyAgICAgICAgYS5wdXRWYWx1ZShBY3Rpb24uU01BTExfSUNPTiwN CiAgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkZXJXcmFwcGVyLmxvb2t1cEljb24oIkFsaWdu Qm90dG9tcyIpKTsNCiAgICAgICAgIEpNZW51SXRlbSBhbGlnbkJvdHRvbXMgPSBhbGlnbi5hZGQo YSk7DQogICAgICAgICBzZXRNbmVtb25pYyhhbGlnbkJvdHRvbXMsICJhbGlnbiBib3R0b21zIik7 DQpAQCAtNzIzLDcgKzcyNCw3IEBADQogDQogICAgICAgICBhID0gbmV3IEFsaWduQWN0aW9uKA0K ICAgICAgICAgICAgICAgICBBbGlnbkFjdGlvbi5BTElHTl9SSUdIVFMpOw0KLSAgICAgICAgYS5w dXRWYWx1ZShBY3Rpb24uU01BTExfSUNPTiwgDQorICAgICAgICBhLnB1dFZhbHVlKEFjdGlvbi5T TUFMTF9JQ09OLA0KICAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRlcldyYXBwZXIubG9va3Vw SWNvbigiQWxpZ25SaWdodHMiKSk7DQogICAgICAgICBKTWVudUl0ZW0gYWxpZ25SaWdodHMgPSBh bGlnbi5hZGQoYSk7DQogICAgICAgICBzZXRNbmVtb25pYyhhbGlnblJpZ2h0cywgImFsaWduIHJp Z2h0cyIpOw0KQEAgLTczMiw3ICs3MzMsNyBAQA0KIA0KICAgICAgICAgYSA9IG5ldyBBbGlnbkFj dGlvbigNCiAgICAgICAgICAgICAgICAgQWxpZ25BY3Rpb24uQUxJR05fTEVGVFMpOw0KLSAgICAg ICAgYS5wdXRWYWx1ZShBY3Rpb24uU01BTExfSUNPTiwgDQorICAgICAgICBhLnB1dFZhbHVlKEFj dGlvbi5TTUFMTF9JQ09OLA0KICAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRlcldyYXBwZXIu bG9va3VwSWNvbigiQWxpZ25MZWZ0cyIpKTsNCiAgICAgICAgIEpNZW51SXRlbSBhbGlnbkxlZnRz ID0gYWxpZ24uYWRkKGEpOw0KICAgICAgICAgc2V0TW5lbW9uaWMoYWxpZ25MZWZ0cywgImFsaWdu IGxlZnRzIik7DQpAQCAtNzQxLDcgKzc0Miw3IEBADQogDQogICAgICAgICBhID0gbmV3IEFsaWdu QWN0aW9uKA0KICAgICAgICAgICAgICAgICBBbGlnbkFjdGlvbi5BTElHTl9IX0NFTlRFUlMpOw0K LSAgICAgICAgYS5wdXRWYWx1ZShBY3Rpb24uU01BTExfSUNPTiwgDQorICAgICAgICBhLnB1dFZh bHVlKEFjdGlvbi5TTUFMTF9JQ09OLA0KICAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRlcldy YXBwZXIubG9va3VwSWNvbigiQWxpZ25Ib3Jpem9udGFsQ2VudGVycyIpKTsNCiAgICAgICAgIEpN ZW51SXRlbSBhbGlnbkhDZW50ZXJzID0gYWxpZ24uYWRkKGEpOw0KICAgICAgICAgc2V0TW5lbW9u aWMoYWxpZ25IQ2VudGVycywNCkBAIC03NTEsNyArNzUyLDcgQEANCiANCiAgICAgICAgIGEgPSBu ZXcgQWxpZ25BY3Rpb24oDQogICAgICAgICAgICAgICAgIEFsaWduQWN0aW9uLkFMSUdOX1ZfQ0VO VEVSUyk7DQotICAgICAgICBhLnB1dFZhbHVlKEFjdGlvbi5TTUFMTF9JQ09OLCANCisgICAgICAg IGEucHV0VmFsdWUoQWN0aW9uLlNNQUxMX0lDT04sDQogICAgICAgICAgICAgICAgIFJlc291cmNl TG9hZGVyV3JhcHBlci5sb29rdXBJY29uKCJBbGlnblZlcnRpY2FsQ2VudGVycyIpKTsNCiAgICAg ICAgIEpNZW51SXRlbSBhbGlnblZDZW50ZXJzID0gYWxpZ24uYWRkKGEpOw0KICAgICAgICAgc2V0 TW5lbW9uaWMoYWxpZ25WQ2VudGVycywgImFsaWduIHZlcnRpY2FsIGNlbnRlcnMiKTsNCkBAIC03 NjAsNyArNzYxLDcgQEANCiANCiAgICAgICAgIGEgPSBuZXcgQWxpZ25BY3Rpb24oDQogICAgICAg ICAgICAgICAgIEFsaWduQWN0aW9uLkFMSUdOX1RPX0dSSUQpOw0KLSAgICAgICAgYS5wdXRWYWx1 ZShBY3Rpb24uU01BTExfSUNPTiwgDQorICAgICAgICBhLnB1dFZhbHVlKEFjdGlvbi5TTUFMTF9J Q09OLA0KICAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRlcldyYXBwZXIubG9va3VwSWNvbigi QWxpZ25Ub0dyaWQiKSk7DQogICAgICAgICBKTWVudUl0ZW0gYWxpZ25Ub0dyaWQgPSBhbGlnbi5h ZGQoYSk7DQogICAgICAgICBzZXRNbmVtb25pYyhhbGlnblRvR3JpZCwgImFsaWduIHRvIGdyaWQi KTsNCkBAIC03NzAsMTQgKzc3MSwxNCBAQA0KIA0KICAgICAvKioNCiAgICAgICogSW5pdGlhbGl6 ZSBzdWJtZW51cyBvZiB0aGUgRGlzdHJpYnV0ZSBtZW51Lg0KLSAgICAgKiANCisgICAgICoNCiAg ICAgICogQHBhcmFtIGRpc3RyaWJ1dGUNCiAgICAgICogICAgICAgICAgICB0aGUgRGlzdHJpYnV0 ZSBtZW51DQogICAgICAqLw0KICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGluaXREaXN0cmlidXRl TWVudShKTWVudSBkaXN0cmlidXRlKSB7DQogICAgICAgICBEaXN0cmlidXRlQWN0aW9uIGEgPSBu ZXcgRGlzdHJpYnV0ZUFjdGlvbigNCiAgICAgICAgICAgICAgICAgRGlzdHJpYnV0ZUFjdGlvbi5I X1NQQUNJTkcpOw0KLSAgICAgICAgYS5wdXRWYWx1ZShBY3Rpb24uU01BTExfSUNPTiwgDQorICAg ICAgICBhLnB1dFZhbHVlKEFjdGlvbi5TTUFMTF9JQ09OLA0KICAgICAgICAgICAgICAgICBSZXNv dXJjZUxvYWRlcldyYXBwZXIubG9va3VwSWNvbigNCiAgICAgICAgICAgICAgICAgICAgICAgICAi RGlzdHJpYnV0ZUhvcml6b250YWxTcGFjaW5nIikpOw0KICAgICAgICAgSk1lbnVJdGVtIGRpc3Ry aWJ1dGVIU3BhY2luZyA9IGRpc3RyaWJ1dGUuYWRkKGEpOw0KQEAgLTc4OCw3ICs3ODksNyBAQA0K IA0KICAgICAgICAgYSA9IG5ldyBEaXN0cmlidXRlQWN0aW9uKA0KICAgICAgICAgICAgICAgICBE aXN0cmlidXRlQWN0aW9uLkhfQ0VOVEVSUyk7DQotICAgICAgICBhLnB1dFZhbHVlKEFjdGlvbi5T TUFMTF9JQ09OLCANCisgICAgICAgIGEucHV0VmFsdWUoQWN0aW9uLlNNQUxMX0lDT04sDQogICAg ICAgICAgICAgICAgIFJlc291cmNlTG9hZGVyV3JhcHBlci5sb29rdXBJY29uKA0KICAgICAgICAg ICAgICAgICAgICAgICAgICJEaXN0cmlidXRlSG9yaXpvbnRhbENlbnRlcnMiKSk7DQogICAgICAg ICBKTWVudUl0ZW0gZGlzdHJpYnV0ZUhDZW50ZXJzID0gZGlzdHJpYnV0ZS5hZGQoYSk7DQpAQCAt Nzk5LDcgKzgwMCw3IEBADQogDQogICAgICAgICBhID0gbmV3IERpc3RyaWJ1dGVBY3Rpb24oDQog ICAgICAgICAgICAgICAgIERpc3RyaWJ1dGVBY3Rpb24uVl9TUEFDSU5HKTsNCi0gICAgICAgIGEu cHV0VmFsdWUoQWN0aW9uLlNNQUxMX0lDT04sIA0KKyAgICAgICAgYS5wdXRWYWx1ZShBY3Rpb24u U01BTExfSUNPTiwNCiAgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkZXJXcmFwcGVyLmxvb2t1 cEljb24oIkRpc3RyaWJ1dGVWZXJ0aWNhbFNwYWNpbmciKSk7DQogICAgICAgICBKTWVudUl0ZW0g ZGlzdHJpYnV0ZVZTcGFjaW5nID0gZGlzdHJpYnV0ZS5hZGQoYSk7DQogICAgICAgICBzZXRNbmVt b25pYyhkaXN0cmlidXRlVlNwYWNpbmcsDQpAQCAtODA5LDcgKzgxMCw3IEBADQogDQogICAgICAg ICBhID0gbmV3IERpc3RyaWJ1dGVBY3Rpb24oDQogICAgICAgICAgICAgICAgIERpc3RyaWJ1dGVB Y3Rpb24uVl9DRU5URVJTKTsNCi0gICAgICAgIGEucHV0VmFsdWUoQWN0aW9uLlNNQUxMX0lDT04s IA0KKyAgICAgICAgYS5wdXRWYWx1ZShBY3Rpb24uU01BTExfSUNPTiwNCiAgICAgICAgICAgICAg ICAgUmVzb3VyY2VMb2FkZXJXcmFwcGVyLmxvb2t1cEljb24oIkRpc3RyaWJ1dGVWZXJ0aWNhbENl bnRlcnMiKSk7DQogICAgICAgICBKTWVudUl0ZW0gZGlzdHJpYnV0ZVZDZW50ZXJzID0gZGlzdHJp YnV0ZS5hZGQoYSk7DQogICAgICAgICBzZXRNbmVtb25pYyhkaXN0cmlidXRlVkNlbnRlcnMsDQpA QCAtODIwLDcgKzgyMSw3IEBADQogDQogICAgIC8qKg0KICAgICAgKiBJbml0aWFsaXplIHRoZSBz dWJtZW51cyBmb3IgdGhlIFJlb3JkZXIgbWVudS4NCi0gICAgICogDQorICAgICAqDQogICAgICAq IEBwYXJhbSByZW9yZGVyDQogICAgICAqICAgICAgICAgICAgdGhlIG1haW4gUmVvcmRlciBtZW51 DQogICAgICAqLw0KQEAgLTkyNSw4ICs5MjYsOCBAQA0KICAgICAgICAgdG9vbHMgPSBuZXcgSk1l bnUobWVudUxvY2FsaXplKCJUb29scyIpKTsNCiAgICAgICAgIHNldE1uZW1vbmljKHRvb2xzLCAi VG9vbHMiKTsNCiANCi0gICAgICAgIC8vIFRPRE86IEFkZCBlbXB0eSBwbGFjZWhvbGRlciBoZXJl PyAgICAgICAgDQotICAgICAgICANCisgICAgICAgIC8vIFRPRE86IEFkZCBlbXB0eSBwbGFjZWhv bGRlciBoZXJlPw0KKw0KICAgICAgICAgYWRkKHRvb2xzKTsNCiANCiAgICAgfQ0KQEAgLTk1MSw3 ICs5NTIsNyBAQA0KICAgICAgICAgc2V0TW5lbW9uaWMoc3lzdGVtSW5mbywgIlN5c3RlbSBJbmZv cm1hdGlvbiIpOw0KICAgICAgICAgU2hvcnRjdXRNZ3IuYXNzaWduQWNjZWxlcmF0b3Ioc3lzdGVt SW5mbywNCiAgICAgICAgICAgICAgICAgU2hvcnRjdXRNZ3IuQUNUSU9OX1NZU1RFTV9JTkZPUk1B VElPTik7DQotICAgICAgICANCisNCiAgICAgICAgIGFib3V0QWN0aW9uID0gbmV3IEFjdGlvbkFi b3V0QXJnb1VNTCgpOw0KICAgICAgICAgaWYgKCFPc1V0aWwuaXNNYWNPU1goKSkgew0KICAgICAg ICAgICAgIGhlbHAuYWRkU2VwYXJhdG9yKCk7DQpAQCAtOTYwLDI2ICs5NjEsMjYgQEANCiAgICAg ICAgICAgICBTaG9ydGN1dE1nci5hc3NpZ25BY2NlbGVyYXRvcihhYm91dEFyZ29VTUwsDQogICAg ICAgICAgICAgICAgICAgICBTaG9ydGN1dE1nci5BQ1RJT05fQUJPVVRfQVJHT1VNTCk7DQogICAg ICAgICB9DQotICAgICAgICANCisNCiAgICAgICAgIC8vIHNldEhlbHBNZW51KGhlbHApOw0KICAg ICAgICAgYWRkKGhlbHApOw0KICAgICB9DQotICAgIA0KKw0KICAgICBwcml2YXRlIHZvaWQgaW5p dE1vZHVsZXNNZW51cygpIHsNCiAgICAgICAgIGZvciAoSk1lbnUgbWVudSA6IG1vZHVsZU1lbnVz KSB7DQogICAgICAgICAgICAgYWRkKG1lbnUpOw0KICAgICAgICAgfQ0KICAgICB9DQotICAgIA0K Kw0KICAgICBwcml2YXRlIHZvaWQgaW5pdE1vZHVsZXNBY3Rpb25zKCkgew0KLSAgICAgICAgZm9y IChBY3Rpb24gYWN0aW9uIDogbW9kdWxlQ3JlYXRlRGlhZ3JhbUFjdGlvbnMpIHsgICAgICAgICAg ICANCisgICAgICAgIGZvciAoQWN0aW9uIGFjdGlvbiA6IG1vZHVsZUNyZWF0ZURpYWdyYW1BY3Rp b25zKSB7DQogICAgICAgICAgICAgY3JlYXRlRGlhZ3JhbVRvb2xiYXIuYWRkKGFjdGlvbik7DQog ICAgICAgICB9DQogICAgIH0NCiANCiAgICAgLyoqDQogICAgICAqIEdldCB0aGUgY3JlYXRlIGRp YWdyYW0gdG9vbGJhci4NCi0gICAgICogDQorICAgICAqDQogICAgICAqIEByZXR1cm4gVmFsdWUg b2YgcHJvcGVydHkgX2NyZWF0ZURpYWdyYW1Ub29sYmFyLg0KICAgICAgKi8NCiAgICAgcHVibGlj IEpUb29sQmFyIGdldENyZWF0ZURpYWdyYW1Ub29sYmFyKCkgew0KQEAgLTk4OSw3ICs5OTAsNyBA QA0KICAgICAvKioNCiAgICAgICogR2V0IHRoZSBjcmVhdGUgZGlhZ3JhbSBtZW51LiBQcm92aWRl ZCB0byBhbGxvdyBwbHVnaW5zDQogICAgICAqIHRvIGFwcGVhbmQgdGhlaXIgb3duIGFjdGlvbnMg dG8gdGhpcyBtZW51Lg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHJldHVybiBWYWx1ZSBv ZiBwcm9wZXJ0eSBjcmVhdGVEaWFncmFtTWVudQ0KICAgICAgKi8NCiAgICAgcHVibGljIEpNZW51 IGdldENyZWF0ZURpYWdyYW1NZW51KCkgew0KQEAgLTk5OCwxNCArOTk5LDE0IEBADQogDQogICAg IC8qKg0KICAgICAgKiBHZXQgdGhlIGVkaXQgdG9vbGJhci4NCi0gICAgICogDQorICAgICAqDQog ICAgICAqIEByZXR1cm4gdGhlIGVkaXQgdG9vbGJhci4NCiAgICAgICovDQogICAgIHB1YmxpYyBK VG9vbEJhciBnZXRFZGl0VG9vbGJhcigpIHsNCiAgICAgICAgIGlmIChlZGl0VG9vbGJhciA9PSBu dWxsKSB7DQogICAgICAgICAgICAgLyogQ3JlYXRlIHRoZSBlZGl0IHRvb2xiYXIgYmFzZWQgb24g dGhlIE1lbnUuDQotICAgICAgICAgICAgICogQWxsIG1lbnVJdGVtcyB0aGF0IGhhdmUgYW4gSWNv biBhcmUgcHJlc3VtZWQgdG8gDQotICAgICAgICAgICAgICogYmUgYmFzZWQgdXBvbiBhbiBBY3Rp b24sIA0KKyAgICAgICAgICAgICAqIEFsbCBtZW51SXRlbXMgdGhhdCBoYXZlIGFuIEljb24gYXJl IHByZXN1bWVkIHRvDQorICAgICAgICAgICAgICogYmUgYmFzZWQgdXBvbiBhbiBBY3Rpb24sDQog ICAgICAgICAgICAgICogYW5kIHRoZXNlIEFjdGlvbnMgYXJlIHVzZWQgaW4gdGhlIHRvb2xiYXIu ICAqLw0KICAgICAgICAgICAgIENvbGxlY3Rpb248QWN0aW9uPiBjID0gbmV3IEFycmF5TGlzdDxB Y3Rpb24+KCk7DQogICAgICAgICAgICAgZm9yIChPYmplY3QgbWkgOiBlZGl0LmdldE1lbnVDb21w b25lbnRzKCkpIHsNCkBAIC0xMDI0LDkgKzEwMjUsOSBAQA0KIA0KICAgICAvKioNCiAgICAgICog R2V0dGVyIGZvciB0aGUgZmlsZSB0b29sYmFyLg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICog QHJldHVybiB0aGUgZmlsZSB0b29sYmFyLg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICovDQog ICAgIHB1YmxpYyBKVG9vbEJhciBnZXRGaWxlVG9vbGJhcigpIHsNCiAgICAgICAgIHJldHVybiBm aWxlVG9vbGJhcjsNCkBAIC0xMDM0LDcgKzEwMzUsNyBAQA0KIA0KICAgICAvKioNCiAgICAgICog R2V0dGVyIGZvciB0aGUgdmlldyB0b29sYmFyLg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICog QHJldHVybiB0aGUgdmlldyB0b29sYmFyLg0KICAgICAgKi8NCiAgICAgcHVibGljIEpUb29sQmFy IGdldFZpZXdUb29sYmFyKCkgew0KQEAgLTEwNTMsMTAgKzEwNTQsMTAgQEANCiAgICAgLyoqDQog ICAgICAqIFByZXBhcmVzIG9uZSBwYXJ0IG9mIHRoZSBrZXkgZm9yIG1lbnUtIG9yL2FuZCBtZW51 aXRlbS1tbmVtb25pY3MgdXNlZCBpbg0KICAgICAgKiBtZW51LnByb3BlcnRpZXMuDQotICAgICAq IA0KKyAgICAgKg0KICAgICAgKiBUaGUgbWV0aG9kIGNoYW5nZXMgdGhlIHBhcmFtZXRlciBrZXkg dG8gbG93ZXIgY2FzZXMuIFNwYWNlcyBpbiB0aGUNCiAgICAgICogcGFyYW1ldGVyIGtleSBhcmUg Y2hhbmdlZCB0byBoeXBoZW5zLg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIGtl eQ0KICAgICAgKiBAcmV0dXJuIHRoZSBwcmVwYXJlZCBrZXkNCiAgICAgICovDQpAQCAtMTA2Niwx MSArMTA2NywxMSBAQA0KIA0KICAgICAvKioNCiAgICAgICogQWRkcyB0aGUgZW50cnkgdG8gdGhl IG1ydSBsaXN0Lg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIGZpbGVuYW1lDQog ICAgICAqICAgICAgICAgICAgb2YgdGhlIHByb2plY3QNCi0gICAgICogICAgICAgICAgICANCi0g ICAgICogVE9ETzogVGhpcyBzaG91bGQgbGlzdGVuIGZvciBmaWxlIHNhdmUgZXZlbnRzIHJhdGhl ciB0aGFuIGJlaW5nIGNhbGxlZCANCisgICAgICoNCisgICAgICogVE9ETzogVGhpcyBzaG91bGQg bGlzdGVuIGZvciBmaWxlIHNhdmUgZXZlbnRzIHJhdGhlciB0aGFuIGJlaW5nIGNhbGxlZA0KICAg ICAgKiBkaXJlY3RseSAtIHRmbS4NCiAgICAgICovDQogICAgIHB1YmxpYyB2b2lkIGFkZEZpbGVT YXZlZChTdHJpbmcgZmlsZW5hbWUpIHsNCkBAIC0xMDc5LDcgKzEwODAsNyBAQA0KIA0KICAgICAv KioNCiAgICAgICogR2V0dGVyIGZvciB0aGUgVG9vbHMgbWVudS4NCi0gICAgICogDQorICAgICAq DQogICAgICAqIEByZXR1cm4gVGhlIFRvb2xzIG1lbnUuDQogICAgICAqLw0KICAgICBwdWJsaWMg Sk1lbnUgZ2V0VG9vbHMoKSB7DQpAQCAtMTExMCw3ICsxMTExLDcgQEANCiAgICAgICAgICAgICAg ICAgICAgIGFjdGlvbi5zZXRFbmFibGVkKGFjdGlvbi5pc0VuYWJsZWQoKSk7DQogICAgICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgICB9DQotICAgICAgICB9KTsgICAgICAgIA0KKyAgICAgICAg fSk7DQogICAgIH0NCiANCiAgICAgcHVibGljIHZvaWQgdGFyZ2V0QWRkZWQoVGFyZ2V0RXZlbnQg ZSkgew0KQEAgLTExMjQsMTAgKzExMjUsMTAgQEANCiAgICAgcHVibGljIHZvaWQgdGFyZ2V0U2V0 KFRhcmdldEV2ZW50IGUpIHsNCiAgICAgICAgIHNldFRhcmdldCgpOw0KICAgICB9DQotICAgIA0K Kw0KICAgICAvKioNCiAgICAgICogQWRkIGEgbmV3IG1lbnUgdG8gdGhlIG1haW4gdG9vbGJhci4N Ci0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBtZW51IHRoZSBtZW51IHRvIGJlIGFk ZGVkDQogICAgICAqLw0KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZW51SXRlbShK TWVudSBtZW51KSB7DQpAQCAtMTEzNyw2MiArMTEzOCw2MiBAQA0KICAgICAvKioNCiAgICAgICog QWRkIGEgbmV3IEFjdGlvbiB0byB0aGUgQ3JlYXRlIERpYWdyYW0gdG9vbGJhci4gIFRoaXMgY2Fu IGJlIHVzZWQgdG8NCiAgICAgICogcmVnaXN0ZXIgY3JlYXRlIGFjdGlvbnMgZm9yIG5ldyBkaWFn cmFtIHR5cGVzIGJ5IHBsdWdpbiBtb2R1bGVzLg0KLSAgICAgKiANCisgICAgICoNCiAgICAgICog QHBhcmFtIGFjdGlvbiB0aGUgY3JlYXRlIGFjdGlvbiB0byBiZSByZWdpc3RlcmVkLg0KICAgICAg Ki8NCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ3JlYXRlRGlhZ3JhbUFjdGlvbihB Y3Rpb24gYWN0aW9uKSB7DQogICAgICAgICBtb2R1bGVDcmVhdGVEaWFncmFtQWN0aW9ucy5hZGQo YWN0aW9uKTsNCiAgICAgfQ0KLSAgICANCisNCiAgICAgcHJpdmF0ZSB2b2lkIHJlZ2lzdGVyRm9y TWFjRXZlbnRzKCkgew0KLSAgICAgICAgTE9HLmluZm8oIkRldGVybWluaW5nIGlmIE1hYyBPUyB0 byBzZXQgc3BlY2lhbCBoYW5kbGVycyIpOw0KKyAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLCAi RGV0ZXJtaW5pbmcgaWYgTWFjIE9TIHRvIHNldCBzcGVjaWFsIGhhbmRsZXJzIik7DQogICAgICAg ICBpZiAoT3NVdGlsLmlzTWFjT1NYKCkpIHsNCi0gICAgICAgICAgICBMT0cuaW5mbygiU3lzdGVt IGlzIE1hYyBPUyAtIHNldHRpbmcgc3BlY2lhbCBoYW5kbGVycyIpOw0KKyAgICAgICAgICAgIExP Ry5sb2coTGV2ZWwuSU5GTywgIlN5c3RlbSBpcyBNYWMgT1MgLSBzZXR0aW5nIHNwZWNpYWwgaGFu ZGxlcnMiKTsNCiAgICAgICAgICAgICB0cnkgew0KLSAgICAgICAgICAgICAgICAvLyBHZW5lcmF0 ZSBhbmQgcmVnaXN0ZXIgdGhlIE9TWEFkYXB0ZXIsIHBhc3NpbmcgdGhlIG1ldGhvZHMgDQorICAg ICAgICAgICAgICAgIC8vIEdlbmVyYXRlIGFuZCByZWdpc3RlciB0aGUgT1NYQWRhcHRlciwgcGFz c2luZyB0aGUgbWV0aG9kcw0KICAgICAgICAgICAgICAgICAvLyB3ZSB3aXNoIHRvIHVzZSBhcyBk ZWxlZ2F0ZXMgZm9yIHZhcmlvdXMNCiAgICAgICAgICAgICAgICAgLy8gY29tLmFwcGxlLmVhd3Qu QXBwbGljYXRpb25MaXN0ZW5lciBtZXRob2RzDQotICAgICAgICAgICAgICAgIExPRy5pbmZvKCJS ZWdpc3RlcmluZyBRdWl0IGhhbmRsZXIgZm9yIE1hYyIpOw0KKyAgICAgICAgICAgICAgICBMT0cu bG9nKExldmVsLklORk8sICJSZWdpc3RlcmluZyBRdWl0IGhhbmRsZXIgZm9yIE1hYyIpOw0KICAg ICAgICAgICAgICAgICBPU1hBZGFwdGVyLnNldFF1aXRIYW5kbGVyKHRoaXMsIGdldENsYXNzKCku Z2V0TWV0aG9kKA0KICAgICAgICAgICAgICAgICAgICAgICAgICJtYWNRdWl0IiwgKENsYXNzW10p IG51bGwpKTsNCi0gICAgICAgICAgICAgICAgTE9HLmluZm8oIlJlZ2lzdGVyaW5nIEFib3V0IGhh bmRsZXIgZm9yIE1hYyIpOw0KKyAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJS ZWdpc3RlcmluZyBBYm91dCBoYW5kbGVyIGZvciBNYWMiKTsNCiAgICAgICAgICAgICAgICAgT1NY QWRhcHRlci5zZXRBYm91dEhhbmRsZXIodGhpcywgZ2V0Q2xhc3MoKS5nZXRNZXRob2QoDQogICAg ICAgICAgICAgICAgICAgICAgICAgIm1hY0Fib3V0IiwgKENsYXNzW10pIG51bGwpKTsNCi0gICAg ICAgICAgICAgICAgTE9HLmluZm8oIlJlZ2lzdGVyaW5nIFByZWZlcmVuY2VzIGhhbmRsZXIgZm9y IE1hYyIpOw0KKyAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJSZWdpc3Rlcmlu ZyBQcmVmZXJlbmNlcyBoYW5kbGVyIGZvciBNYWMiKTsNCiAgICAgICAgICAgICAgICAgT1NYQWRh cHRlci5zZXRQcmVmZXJlbmNlc0hhbmRsZXIodGhpcywgZ2V0Q2xhc3MoKQ0KICAgICAgICAgICAg ICAgICAgICAgICAgIC5nZXRNZXRob2QoIm1hY1ByZWZlcmVuY2VzIiwgKENsYXNzW10pIG51bGwp KTsNCi0gICAgICAgICAgICAgICAgTE9HLmluZm8oIlJlZ2lzdGVyaW5nIEZpbGUgaGFuZGxlciBm b3IgTWFjIik7DQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywgIlJlZ2lzdGVy aW5nIEZpbGUgaGFuZGxlciBmb3IgTWFjIik7DQogICAgICAgICAgICAgICAgIE9TWEFkYXB0ZXIu c2V0RmlsZUhhbmRsZXIodGhpcywgZ2V0Q2xhc3MoKS5nZXRNZXRob2QoDQogICAgICAgICAgICAg ICAgICAgICAgICAgIm1hY09wZW5GaWxlIiwgbmV3IENsYXNzW10ge1N0cmluZy5jbGFzc30pKTsN Ci0gICAgICAgICAgICAgICAgTE9HLmluZm8oIkFsbCBNYWMgaGFuZGxlcnMgc2V0Iik7DQorICAg ICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywgIkFsbCBNYWMgaGFuZGxlcnMgc2V0Iik7 DQogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICAgICAg TE9HLmVycm9yKCJFcnJvciB3aGlsZSBsb2FkaW5nIHRoZSBPU1hBZGFwdGVyOiIsIGUpOw0KKyAg ICAgICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwgIkVycm9yIHdoaWxlIGxvYWRpbmcg dGhlIE9TWEFkYXB0ZXI6IiwgZSk7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KICAgICB9 DQotICAgIA0KKw0KICAgICAvKioNCiAgICAgICogSW50ZXJuYWwgdXNlIG9ubHkuICBEbyBub3Qg dXNlLg0KICAgICAgKi8NCiAgICAgcHVibGljIGJvb2xlYW4gbWFjUXVpdCgpIHsNCi0gICAgICAg IExPRy5pbmZvKCJRdWl0IGhhcyBiZWVuIGNob3NlbiBvbiBhIE1hYyIpOw0KKyAgICAgICAgTE9H LmxvZyhMZXZlbC5JTkZPLCAiUXVpdCBoYXMgYmVlbiBjaG9zZW4gb24gYSBNYWMiKTsNCiAgICAg ICAgIHJldHVybiBQcm9qZWN0QnJvd3Nlci5nZXRJbnN0YW5jZSgpLnRyeUV4aXQoKTsNCiAgICAg fQ0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIEludGVybmFsIHVzZSBvbmx5LiAgRG8gbm90 IHVzZS4NCiAgICAgICovDQogICAgIHB1YmxpYyB2b2lkIG1hY0Fib3V0KCkgew0KICAgICAgICAg YWJvdXRBY3Rpb24uYWN0aW9uUGVyZm9ybWVkKG51bGwpOw0KICAgICB9DQotICAgIA0KKw0KICAg ICAvKioNCiAgICAgICogSW50ZXJuYWwgdXNlIG9ubHkuICBEbyBub3QgdXNlLg0KICAgICAgKi8N CiAgICAgcHVibGljIHZvaWQgbWFjUHJlZmVyZW5jZXMoKSB7DQogICAgICAgICBzZXR0aW5nc0Fj dGlvbi5hY3Rpb25QZXJmb3JtZWQobnVsbCk7DQogICAgIH0NCi0gICAgDQorDQogICAgIC8qKg0K ICAgICAgKiBJbnRlcm5hbCB1c2Ugb25seS4gIERvIG5vdCB1c2UuDQogICAgICAqIEBwYXJhbSBm aWxlbmFtZSBuYW1lIG9mIGZpbGUgdG8gYmUgb3BlbmVkDQoNCk1vZGlmaWVkOiB0cnVuay9zcmMv YXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL2NtZC9MYXN0UmVjZW50bHlVc2VkTWVudUxp c3QuamF2YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJn b3VtbC90cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL2NtZC9MYXN0UmVj ZW50bHlVc2VkTWVudUxpc3QuamF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZy Mj0xOTkwNw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBw L3NyYy9vcmcvYXJnb3VtbC91aS9jbWQvTGFzdFJlY2VudGx5VXNlZE1lbnVMaXN0LmphdmEJKG9y aWdpbmFsKQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvY21k L0xhc3RSZWNlbnRseVVzZWRNZW51TGlzdC5qYXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0K QEAgLTEsNiArMSw2IEBADQogLyogJElkJA0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENv cHlyaWdodCAoYykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQg KGMpIDIwMDktMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJl c2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICog YXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMg TGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFu ZCBpcyBhdmFpbGFibGUgYXQNCkBAIC0zOCwxMyArMzgsMTUgQEANCiANCiBwYWNrYWdlIG9yZy5h cmdvdW1sLnVpLmNtZDsNCiANCitpbXBvcnQgamF2YS5pby5GaWxlOw0KKw0KIGltcG9ydCBqYXZh eC5zd2luZy5KTWVudTsNCiBpbXBvcnQgamF2YXguc3dpbmcuSk1lbnVJdGVtOw0KKw0KIGltcG9y dCBvcmcuYXJnb3VtbC5hcHBsaWNhdGlvbi5hcGkuQXJnbzsNCiBpbXBvcnQgb3JnLmFyZ291bWwu Y29uZmlndXJhdGlvbi5Db25maWd1cmF0aW9uOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5jb25maWd1 cmF0aW9uLkNvbmZpZ3VyYXRpb25LZXk7DQogaW1wb3J0IG9yZy5hcmdvdW1sLnVtbC51aS5BY3Rp b25SZW9wZW5Qcm9qZWN0Ow0KLWltcG9ydCBqYXZhLmlvLkZpbGU7DQogDQogLy8gVE9ETzogVGhp cyBjbGFzcyBpcyBwYXJ0IG9mIGEgZGVwZW5kZW5jeSBjeWNsZSB3aXRoIFByb2plY3RCcm93c2Vy IGFuZA0KIC8vIEdlbmVyaWNBcmdvTWVudUJhciwgYnV0IHNob3VsZCAgYmUgZml4ZWQgaWYgcHJv amVjdCBvcGVuL2Nsb3NlIGlzIG1vdmVkDQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1h cHAvc3JjL29yZy9hcmdvdW1sL3VpL2NtZC9TaG9ydGN1dE1nci5qYXZhDQpVcmw6IGh0dHA6Ly9h cmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdvdW1s LWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvY21kL1Nob3J0Y3V0TWdyLmphdmE/dmlldz1kaWZmJnBh dGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvY21kL1Nob3J0Y3V0TWdy LmphdmEJKG9yaWdpbmFsKQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291 bWwvdWkvY21kL1Nob3J0Y3V0TWdyLmphdmEJMjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAt MSw2ICsxLDYgQEANCiAvKiAkSWQkDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJp Z2h0IChjKSAyMDA5IENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KKyAqIENvcHlyaWdodCAoYykg MjAwOS0yMDEyIENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KICAqIEFsbCByaWdodHMgcmVzZXJ2 ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAgKiBhcmUg bWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNl bnNlIHYxLjANCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlz IGF2YWlsYWJsZSBhdA0KQEAgLTQ4LDYgKzQ4LDggQEANCiBpbXBvcnQgamF2YS51dGlsLkl0ZXJh dG9yOw0KIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCiBpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rv a2VuaXplcjsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEu dXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiANCiBpbXBvcnQgamF2YXguc3dpbmcuQWJzdHJhY3RBY3Rp b247DQogaW1wb3J0IGphdmF4LnN3aW5nLkpDb21wb25lbnQ7DQpAQCAtNTUsNyArNTcsNiBAQA0K IGltcG9ydCBqYXZheC5zd2luZy5KUGFuZWw7DQogaW1wb3J0IGphdmF4LnN3aW5nLktleVN0cm9r ZTsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdv dW1sLmNvZ25pdGl2ZS5jcml0aWNzLnVpLkFjdGlvbk9wZW5Dcml0aWNzOw0KIGltcG9ydCBvcmcu YXJnb3VtbC5jb2duaXRpdmUudWkuQWN0aW9uQXV0b0NyaXRpcXVlOw0KIGltcG9ydCBvcmcuYXJn b3VtbC5jb2duaXRpdmUudWkuQWN0aW9uT3BlbkRlY2lzaW9uczsNCkBAIC05Myw4ICs5NCw4IEBA DQogaW1wb3J0IG9yZy50aWdyaXMuZ2VmLmJhc2UuWm9vbUFjdGlvbjsNCiANCiAvKioNCi0gKiBU aGlzIGNsYXNzIG1hbmFnZXMgYWxsIEFyZ28ncyBzaG9ydGN1dHMNCi0gKiANCisgKiBUaGlzIGNs YXNzIG1hbmFnZXMgYWxsIEFyZ28ncyBzaG9ydGN1dHMuDQorICoNCiAgKiBAYXV0aG9yIG5pcnV4 DQogICovDQogcHVibGljIGNsYXNzIFNob3J0Y3V0TWdyIHsNCkBAIC0xMjcsNyArMTI4LDcgQEAN CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX1JFTU9WRV9GUk9NX0RJQUdS QU0gPSAicmVtb3ZlRnJvbURpYWdyYW0iOw0KIA0KICAgICAvKiogQWN0aW9uIGtleSBmb3IgZGVs ZXRlIG1vZGVsIGVsZW1lbnRzICovDQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFD VElPTl9ERUxFVEVfTU9ERUxfRUxFTUVOVFMgPSANCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBT dHJpbmcgQUNUSU9OX0RFTEVURV9NT0RFTF9FTEVNRU5UUyA9DQogICAgICAgICAiZGVsZXRlTW9k ZWxFbGVtZW50cyI7DQogDQogICAgIC8qKiBBY3Rpb24ga2V5IGZvciB6b29tIG91dCAqLw0KQEAg LTE0MCw3ICsxNDEsNyBAQA0KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05f RklORCA9ICJmaW5kIjsNCiANCiAgICAgLyoqIEFjdGlvbiBrZXkgZm9yIGdlbmVyYXRlIGFsbCBj bGFzc2VzICovDQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9HRU5FUkFU RV9BTExfQ0xBU1NFUyA9IA0KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05f R0VORVJBVEVfQUxMX0NMQVNTRVMgPQ0KICAgICAgICAgImdlbmVyYXRlQWxsQ2xhc3NlcyI7DQog DQogICAgIC8qKiBBY3Rpb24ga2V5IGZvciBhbGlnbiByaWdodHMgKi8NCkBAIC0xNzQsNyArMTc1 LDcgQEANCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX1NBVkVfQUxMX0dS QVBISUNTID0gInNhdmVBbGxHcmFwaGljcyI7DQogDQogICAgIC8qKiBBY3Rpb24ga2V5IGZvciBu YXZpZ2F0ZSBmb3J3YXJkICovDQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElP Tl9OQVZJR0FURV9GT1JXQVJEID0gDQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFD VElPTl9OQVZJR0FURV9GT1JXQVJEID0NCiAgICAgICAgICJuYXZpZ2F0ZVRhcmdldEZvcndhcmQi Ow0KIA0KICAgICAvKiogQWN0aW9uIGtleSBmb3IgbmF2aWdhdGUgYmFjayAqLw0KQEAgLTIyMCw3 ICsyMjEsNyBAQA0KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fU0VRVUVO Q0VfRElBR1JBTSA9ICJzZXF1ZW5jZURpYWdyYW1zIjsNCiANCiAgICAgLyoqIEFjdGlvbiBrZXkg Zm9yIGNvbGxhYm9yYXRpb24gZGlhZ3JhbSAqLw0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0 cmluZyBBQ1RJT05fQ09MTEFCT1JBVElPTl9ESUFHUkFNID0gDQorICAgIHB1YmxpYyBzdGF0aWMg ZmluYWwgU3RyaW5nIEFDVElPTl9DT0xMQUJPUkFUSU9OX0RJQUdSQU0gPQ0KICAgICAgICAgImNv bGxhYm9yYXRpb25EaWFncmFtcyI7DQogDQogICAgIC8qKiBBY3Rpb24ga2V5IGZvciBzdGF0ZSBk aWFncmFtICovDQpAQCAtMjM2LDExICsyMzcsMTEgQEANCiAgICAgcHVibGljIHN0YXRpYyBmaW5h bCBTdHJpbmcgQUNUSU9OX0dFTkVSQVRFX09ORSA9ICJnZW5lcmF0ZU9uZSI7DQogDQogICAgIC8q KiBBY3Rpb24ga2V5IGZvciBnZW5lcmF0ZSBwcm9qZWN0IGNvZGUgKi8NCi0gICAgcHVibGljIHN0 YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX0dFTkVSQVRFX1BST0pFQ1RfQ09ERSA9IA0KKyAgICBw dWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fR0VORVJBVEVfUFJPSkVDVF9DT0RFID0N CiAgICAgICAgICJnZW5lcmF0ZVByb2plY3RDb2RlIjsNCiANCiAgICAgLyoqIEFjdGlvbiBrZXkg Zm9yIGdlbmVyYXRpb24gc2V0dGluZ3MgKi8NCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJp bmcgQUNUSU9OX0dFTkVSQVRJT05fU0VUVElOR1MgPSANCisgICAgcHVibGljIHN0YXRpYyBmaW5h bCBTdHJpbmcgQUNUSU9OX0dFTkVSQVRJT05fU0VUVElOR1MgPQ0KICAgICAgICAgImdlbmVyYXRp b25TZXR0aW5ncyI7DQogDQogICAgIC8qKiBBY3Rpb24ga2V5IGZvciBwcmVmZXJyZWQgc2l6ZSAq Lw0KQEAgLTI4MywxOSArMjg0LDE5IEBADQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5n IEFDVElPTl9BTElHTl9UT19HUklEID0gImFsaWduVG9HcmlkIjsNCiANCiAgICAgLyoqIEFjdGlv biBrZXkgZm9yIGRpc3RyaWJ1dGUgaCBzcGFjaW5nICovDQotICAgIHB1YmxpYyBzdGF0aWMgZmlu YWwgU3RyaW5nIEFDVElPTl9ESVNUUklCVVRFX0hfU1BBQ0lORyA9IA0KKyAgICBwdWJsaWMgc3Rh dGljIGZpbmFsIFN0cmluZyBBQ1RJT05fRElTVFJJQlVURV9IX1NQQUNJTkcgPQ0KICAgICAgICAg ImRpc3RyaWJ1dGVIU3BhY2luZyI7DQogDQogICAgIC8qKiBBY3Rpb24ga2V5IGZvciBkaXN0cmli dXRlIGggY2VudGVycyAqLw0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05f RElTVFJJQlVURV9IX0NFTlRFUlMgPSANCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcg QUNUSU9OX0RJU1RSSUJVVEVfSF9DRU5URVJTID0NCiAgICAgICAgICJkaXN0cmlidXRlSENlbnRl cnMiOw0KIA0KICAgICAvKiogQWN0aW9uIGtleSBmb3IgZGlzdHJpYnV0ZSB2IHNwYWNpbmcgKi8N Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX0RJU1RSSUJVVEVfVl9TUEFD SU5HID0gDQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9ESVNUUklCVVRF X1ZfU1BBQ0lORyA9DQogICAgICAgICAiZGlzdHJpYnV0ZVZTcGFjaW5nIjsNCiANCiAgICAgLyoq IEFjdGlvbiBrZXkgZm9yIGRpc3RyaWJ1dGUgdiBjZW50ZXJzICovDQotICAgIHB1YmxpYyBzdGF0 aWMgZmluYWwgU3RyaW5nIEFDVElPTl9ESVNUUklCVVRFX1ZfQ0VOVEVSUyA9IA0KKyAgICBwdWJs aWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fRElTVFJJQlVURV9WX0NFTlRFUlMgPQ0KICAg ICAgICAgImRpc3RyaWJ1dGVWQ2VudGVycyI7DQogDQogICAgIC8qKiBBY3Rpb24ga2V5IGZvciBy ZW9yZGVyIGZvcndhcmQgKi8NCkBAIC0zMDksMTEgKzMxMCwxMSBAQA0KIA0KICAgICAvKiogQWN0 aW9uIGtleSBmb3IgcmVvcmRlciB0byBiYWNrICovDQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwg U3RyaW5nIEFDVElPTl9SRU9SREVSX1RPX0JBQ0sgPSAicmVvcmRlclRvQmFjayI7DQotICAgIA0K Kw0KICAgICAvKioNCiAgICAgICogTG9nZ2VyLg0KICAgICAgKi8NCi0gICAgcHJpdmF0ZSBzdGF0 aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoU2hvcnRjdXRNZ3IuY2xhc3Mp Ow0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyLmdldExvZ2dl cihTaG9ydGN1dE1nci5jbGFzcy5nZXROYW1lKCkpOw0KIA0KICAgICBwcml2YXRlIHN0YXRpYyBm aW5hbCBpbnQgREVGQVVMVF9NQVNLID0gVG9vbGtpdC5nZXREZWZhdWx0VG9vbGtpdCgpDQogICAg ICAgICAgICAgLmdldE1lbnVTaG9ydGN1dEtleU1hc2soKTsNCkBAIC0zMjEsMTUgKzMyMiwxNSBA QA0KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0hJRlRFRF9ERUZBVUxUX01BU0sgPSBU b29sa2l0LmdldERlZmF1bHRUb29sa2l0KCkNCiAgICAgICAgICAgICAuZ2V0TWVudVNob3J0Y3V0 S2V5TWFzaygpIHwgS2V5RXZlbnQuU0hJRlRfRE9XTl9NQVNLOw0KIA0KLSAgICBwcml2YXRlIHN0 YXRpYyBIYXNoTWFwPFN0cmluZywgQWN0aW9uV3JhcHBlcj4gc2hvcnRjdXRIYXNoID0gDQorICAg IHByaXZhdGUgc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBBY3Rpb25XcmFwcGVyPiBzaG9ydGN1dEhh c2ggPQ0KICAgICAgICAgbmV3IEhhc2hNYXA8U3RyaW5nLCBBY3Rpb25XcmFwcGVyPig5MCk7DQog DQotICAgIHByaXZhdGUgc3RhdGljIEhhc2hNYXA8S2V5U3Ryb2tlLCBLZXlTdHJva2U+IGR1cGxp Y2F0ZSA9IA0KKyAgICBwcml2YXRlIHN0YXRpYyBIYXNoTWFwPEtleVN0cm9rZSwgS2V5U3Ryb2tl PiBkdXBsaWNhdGUgPQ0KICAgICAgICAgbmV3IEhhc2hNYXA8S2V5U3Ryb2tlLCBLZXlTdHJva2U+ KDEwKTsNCiANCiAgICAgLyoqDQogICAgICAqIFJldHVybiB0aGUgc2hvcnRjdXRzIGFzIGFuIEFj dGlvbldyYXBwZXIgYXJyYXkNCi0gICAgICogDQorICAgICAqDQogICAgICAqIEByZXR1cm4gYW4g YXJyYXkgb2YgQWN0aW9uV3JhcHBlcnMNCiAgICAgICovDQogICAgIHN0YXRpYyBBY3Rpb25XcmFw cGVyW10gZ2V0U2hvcnRjdXRzKCkgew0KQEAgLTM1MywxMyArMzU0LDEzIEBADQogDQogICAgIC8q Kg0KICAgICAgKiBBc3NpZ24gYSBzaG9ydGN1dCB0byB0aGUgZ2l2ZW4gSk1lbnVJdGVtDQotICAg ICAqIA0KKyAgICAgKg0KICAgICAgKiBAcGFyYW0gbWVudUl0ZW0NCiAgICAgICogICAgICAgICAg ICB0aGUgbWVudSBpdGVtDQogICAgICAqIEBwYXJhbSBzaG9ydGN1dEtleQ0KICAgICAgKiAgICAg ICAgICAgIHRoZSBzaG9ydGN1dCBrZXkNCiAgICAgICovDQotICAgIHB1YmxpYyBzdGF0aWMgdm9p ZCBhc3NpZ25BY2NlbGVyYXRvcihKTWVudUl0ZW0gbWVudUl0ZW0sIA0KKyAgICBwdWJsaWMgc3Rh dGljIHZvaWQgYXNzaWduQWNjZWxlcmF0b3IoSk1lbnVJdGVtIG1lbnVJdGVtLA0KICAgICAgICAg ICAgIFN0cmluZyBzaG9ydGN1dEtleSkgew0KICAgICAgICAgQWN0aW9uV3JhcHBlciBzaG9ydGN1 dCA9IHNob3J0Y3V0SGFzaC5nZXQoc2hvcnRjdXRLZXkpOw0KIA0KQEAgLTM4MiwxMyArMzgzLDEz IEBADQogDQogICAgIC8qKg0KICAgICAgKiBBc3NpZ24gYSBzaG9ydGN1dCB0byB0aGUgZ2l2ZW4g SlBhbmVsIChvbmx5IHdoZW4gZm9jdXNlZCkNCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBw YXJhbSBwYW5lbA0KICAgICAgKiAgICAgICAgICAgIHRoZSBwYW5lbA0KICAgICAgKiBAcGFyYW0g c2hvcnRjdXRLZXkNCiAgICAgICogICAgICAgICAgICB0aGUgc2hvcnRjdXQga2V5DQogICAgICAq Lw0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgYXNzaWduQWNjZWxlcmF0b3IoSlBhbmVsIHBhbmVs LCANCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGFzc2lnbkFjY2VsZXJhdG9yKEpQYW5lbCBwYW5l bCwNCiAgICAgICAgICAgICBTdHJpbmcgc2hvcnRjdXRLZXkpIHsNCiAgICAgICAgIEFjdGlvbldy YXBwZXIgc2hvcnRjdXQgPSBzaG9ydGN1dEhhc2guZ2V0KHNob3J0Y3V0S2V5KTsNCiANCkBAIC0z OTYsMzUgKzM5NywzNSBAQA0KICAgICAgICAgICAgIEtleVN0cm9rZSBrZXlTdHJva2UgPSBzaG9y dGN1dC5nZXRDdXJyZW50U2hvcnRjdXQoKTsNCiAgICAgICAgICAgICBpZiAoa2V5U3Ryb2tlICE9 IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBtZXRob2QgaXMgb2Jzb2xl dGUuICBVc2UgZ2V0SW5wdXRNYXAgZXRjIGFzIGJlbG93DQotICAgICAgICAgICAgICAgIHBhbmVs LnJlZ2lzdGVyS2V5Ym9hcmRBY3Rpb24oc2hvcnRjdXQuZ2V0QWN0aW9uSW5zdGFuY2UoKSwgDQor ICAgICAgICAgICAgICAgIHBhbmVsLnJlZ2lzdGVyS2V5Ym9hcmRBY3Rpb24oc2hvcnRjdXQuZ2V0 QWN0aW9uSW5zdGFuY2UoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBrZXlTdHJva2UsIEpD b21wb25lbnQuV0hFTl9GT0NVU0VEKTsNCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgS2V5 U3Ryb2tlIGFsdGVybmF0aXZlS2V5U3Ryb2tlID0gZHVwbGljYXRlLmdldChrZXlTdHJva2UpOw0K ICAgICAgICAgICAgIGlmIChhbHRlcm5hdGl2ZUtleVN0cm9rZSAhPSBudWxsKSB7DQotICAgICAg ICAgICAgICAgIFN0cmluZyBhY3Rpb25OYW1lID0gKFN0cmluZykgDQorICAgICAgICAgICAgICAg IFN0cmluZyBhY3Rpb25OYW1lID0gKFN0cmluZykNCiAgICAgICAgICAgICAgICAgICAgIHNob3J0 Y3V0LmdldEFjdGlvbkluc3RhbmNlKCkuZ2V0VmFsdWUoQWJzdHJhY3RBY3Rpb24uTkFNRSk7DQog DQogICAgICAgICAgICAgICAgIHBhbmVsLmdldElucHV0TWFwKEpDb21wb25lbnQuV0hFTl9GT0NV U0VEKS5wdXQoDQogICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmVLZXlTdHJva2Us IGFjdGlvbk5hbWUpOw0KLSAgICAgICAgICAgICAgICBwYW5lbC5nZXRBY3Rpb25NYXAoKS5wdXQo YWN0aW9uTmFtZSwgDQorICAgICAgICAgICAgICAgIHBhbmVsLmdldEFjdGlvbk1hcCgpLnB1dChh Y3Rpb25OYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0Y3V0LmdldEFjdGlvbklu c3RhbmNlKCkpOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgfQ0KLSAgICANCisN CiAgICAgLyoqDQogICAgICAqIFNlYXJjaCBmb3IgdGhlIGR1cGxpY2F0ZSBvZiBhIGdpdmVuIEtl eVN0cm9rZQ0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIGtleVN0cm9rZSAgICAg ICAgIHRoZSBLZXlTdHJva2UgdG8gc2VhcmNoIGZvcg0KICAgICAgKiBAcmV0dXJuICAgICAgICAg ICAgICAgICAgdGhlIGR1cGxpY2F0ZSwgb3IgbnVsbCBpZiBub3QgcHJlc2VudA0KICAgICAgKi8N CiAgICAgc3RhdGljIEtleVN0cm9rZSBnZXREdXBsaWNhdGUoS2V5U3Ryb2tlIGtleVN0cm9rZSkg ew0KICAgICAgICAgcmV0dXJuIGR1cGxpY2F0ZS5nZXQoa2V5U3Ryb2tlKTsNCiAgICAgfQ0KLSAg ICANCisNCiAgICAgLyoqDQogICAgICAqIFJldHVybnMgYSBzaG9ydGN1dCBmb3IgdGhlIGdpdmVu IGFjdGlvbiBpZA0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogQHBhcmFtIGFjdGlvbklkDQog ICAgICAqICAgICAgICAgICAgdGhlIGlkIG9mIHRoZSBhY3Rpb24NCiAgICAgICogQHJldHVybiB0 aGUgZ2l2ZW4gYWN0aW9uLCBvciBudWxsIGlmIHRoZSBhY3Rpb24gaXMgbm90IGZvdW5kDQpAQCAt NDM1LDcgKzQzNiw3IEBADQogDQogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcHV0RGVmYXVsdFNo b3J0Y3V0KFN0cmluZyBzaG9ydGN1dEtleSwNCiAgICAgICAgIEtleVN0cm9rZSBkZWZhdWx0S2V5 U3Ryb2tlLCBBYnN0cmFjdEFjdGlvbiBhY3Rpb24pIHsNCi0gICAgICAgIHB1dERlZmF1bHRTaG9y dGN1dChzaG9ydGN1dEtleSwgZGVmYXVsdEtleVN0cm9rZSwgYWN0aW9uLCANCisgICAgICAgIHB1 dERlZmF1bHRTaG9ydGN1dChzaG9ydGN1dEtleSwgZGVmYXVsdEtleVN0cm9rZSwgYWN0aW9uLA0K ICAgICAgICAgICAgICAgICBnZXRBY3Rpb25EZWZhdWx0TmFtZShhY3Rpb24pKTsNCiAgICAgfQ0K IA0KQEAgLTQ1Nyw3ICs0NTgsNyBAQA0KICAgICAgICAgICAgIGN1cnJlbnRLZXlTdHJva2UgPSBk ZWNvZGVLZXlTdHJva2UoY29uZkN1cnJlbnRTaG9ydGN1dCk7DQogICAgICAgICB9DQogDQotICAg ICAgICBBY3Rpb25XcmFwcGVyIGN1cnJlbnRTaG9ydGN1dCA9IA0KKyAgICAgICAgQWN0aW9uV3Jh cHBlciBjdXJyZW50U2hvcnRjdXQgPQ0KICAgICAgICAgICAgIG5ldyBBY3Rpb25XcmFwcGVyKHNo b3J0Y3V0S2V5LCBjdXJyZW50S2V5U3Ryb2tlLA0KICAgICAgICAgICAgICAgICBkZWZhdWx0S2V5 U3Ryb2tlLCBhY3Rpb24sIGFjdGlvbk5hbWUpOw0KICAgICAgICAgc2hvcnRjdXRIYXNoLnB1dChz aG9ydGN1dEtleSwgY3VycmVudFNob3J0Y3V0KTsNCkBAIC00NjUsNyArNDY2LDcgQEANCiANCiAg ICAgLyoqDQogICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIGdpdmVuIFN0cmluZyBpbnRv IHRoZSBjb3JyZXNwb25kaW5nIEtleVN0cm9rZQ0KLSAgICAgKiANCisgICAgICoNCiAgICAgICog QHBhcmFtIHN0cktleVN0cm9rZQ0KICAgICAgKiAgICAgICAgICAgIHRoZSBTdHJpbmcgdG8gYmUg ZGVjb2RlZA0KICAgICAgKiBAcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIEtleVN0cm9rZQ0KQEAg LTQ4Niw3ICs0ODcsNyBAQA0KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEtleVN0cm9rZS5n ZXRLZXlTdHJva2UoZi5nZXRJbnQobnVsbCksIG1vZGlmaWVycyk7DQogDQogICAgICAgICAgICAg ICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHsNCi0gICAgICAgICAgICAgICAgICAgIExPRy5l cnJvcigiRXhjZXB0aW9uOiAiICsgZXhjKTsNCisgICAgICAgICAgICAgICAgICAgIExPRy5sb2co TGV2ZWwuU0VWRVJFLCAiRXhjZXB0aW9uOiAiICsgZXhjKTsNCiAgICAgICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCkBAIC00OTUsNyArNDk2LDcgQEANCiANCiAgICAg LyoqDQogICAgICAqIFNhdmVzIHRoZSBnaXZlbiBhY3Rpb25zIGluIHRoZSBjb25maWd1cmF0aW9u IGZpbGUNCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBuZXdBY3Rpb25zDQogICAg ICAqICAgICAgICAgICAgdGhlIGFjdGlvbnMgYXJyYXkNCiAgICAgICovDQpAQCAtNTQwLDcgKzU0 MSw3IEBADQogICAgICAgICAgICAgcmV0dXJuIElucHV0RXZlbnQuU0hJRlRfRE9XTl9NQVNLOw0K ICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAvLyBpdCBzaG91bGQgbmV2ZXIgZ28gaGVy ZSENCi0gICAgICAgICAgICBMT0cuZGVidWcoIlVua25vd24gbW9kaWZpZXI6ICIgKyBtb2RpZmll cik7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiVW5rbm93biBtb2RpZmllcjog ezB9IiwgbW9kaWZpZXIpOw0KICAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICAgfQ0KICAg ICB9DQpAQCAtNTQ4LDExICs1NDksMTEgQEANCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdl dEFjdGlvbkRlZmF1bHROYW1lKEFic3RyYWN0QWN0aW9uIGFjdGlvbikgew0KICAgICAgICAgcmV0 dXJuIChTdHJpbmcpIGFjdGlvbi5nZXRWYWx1ZShBYnN0cmFjdEFjdGlvbi5OQU1FKTsNCiAgICAg fQ0KLSAgICANCisNCiAgICAgLy8gbGV0J3MgbG9hZCB0aGUgZGVmYXVsdCBzaG9ydGN1dCBmb3Ig ZXZlcnkgYWN0aW9uDQogICAgIHN0YXRpYyB7DQogICAgICAgICAvLyBGaXJzdCBvZiBhbGwsIGxl dCdzIHNldCB1cCB0aGUgZHVwbGljYXRlIGhhc2guIFRoaXMgaGFzaCBjb250YWlucw0KLSAgICAg ICAgLy8gYWxsIHRoZSBkdXBsaWNhdGUga2V5IGZvciBhbm90aGVyIGtleS4gDQorICAgICAgICAv LyBhbGwgdGhlIGR1cGxpY2F0ZSBrZXkgZm9yIGFub3RoZXIga2V5Lg0KICAgICAgICAgLy8NCiAg ICAgICAgIC8vIFRPRE86IGV2ZXJ5IGR1cGxpY2F0ZS5wdXQoKSBpcyBkb25lIHR3aWNlIC0gYnV0 IGhvdyB0byBhdm9pZCB0aGlzPw0KICAgICAgICAgZHVwbGljYXRlLnB1dChLZXlTdHJva2UuZ2V0 S2V5U3Ryb2tlKEtleUV2ZW50LlZLX01JTlVTLCBERUZBVUxUX01BU0spLA0KQEAgLTU2MCw5ICs1 NjEsOSBAQA0KICAgICAgICAgZHVwbGljYXRlLnB1dChLZXlTdHJva2UuZ2V0S2V5U3Ryb2tlKA0K ICAgICAgICAgICAgICAgICBLZXlFdmVudC5WS19TVUJUUkFDVCwgREVGQVVMVF9NQVNLKSwNCiAg ICAgICAgICAgICAgICAgS2V5U3Ryb2tlLmdldEtleVN0cm9rZShLZXlFdmVudC5WS19NSU5VUywg REVGQVVMVF9NQVNLKSk7DQotICAgICAgICBkdXBsaWNhdGUucHV0KEtleVN0cm9rZS5nZXRLZXlT dHJva2UoS2V5RXZlbnQuVktfUExVUywgREVGQVVMVF9NQVNLKSwgDQorICAgICAgICBkdXBsaWNh dGUucHV0KEtleVN0cm9rZS5nZXRLZXlTdHJva2UoS2V5RXZlbnQuVktfUExVUywgREVGQVVMVF9N QVNLKSwNCiAgICAgICAgICAgICAgICAgS2V5U3Ryb2tlLmdldEtleVN0cm9rZShLZXlFdmVudC5W S19BREQsIERFRkFVTFRfTUFTSykpOw0KLSAgICAgICAgZHVwbGljYXRlLnB1dChLZXlTdHJva2Uu Z2V0S2V5U3Ryb2tlKEtleUV2ZW50LlZLX0FERCwgREVGQVVMVF9NQVNLKSwgDQorICAgICAgICBk dXBsaWNhdGUucHV0KEtleVN0cm9rZS5nZXRLZXlTdHJva2UoS2V5RXZlbnQuVktfQURELCBERUZB VUxUX01BU0spLA0KICAgICAgICAgICAgICAgICBLZXlTdHJva2UuZ2V0S2V5U3Ryb2tlKEtleUV2 ZW50LlZLX1BMVVMsIERFRkFVTFRfTUFTSykpOw0KIA0KICAgICAgICAgLy8gZmlsZSBtZW51DQpA QCAtNTcxLDcgKzU3Miw3IEBADQogICAgICAgICBwdXREZWZhdWx0U2hvcnRjdXQoQUNUSU9OX09Q RU5fUFJPSkVDVCwgS2V5U3Ryb2tlLmdldEtleVN0cm9rZSgNCiAgICAgICAgICAgICAgICAgS2V5 RXZlbnQuVktfTywgREVGQVVMVF9NQVNLKSwgbmV3IEFjdGlvbk9wZW5Qcm9qZWN0KCkpOw0KICAg ICAgICAgcHV0RGVmYXVsdFNob3J0Y3V0KEFDVElPTl9TQVZFX1BST0pFQ1QsIEtleVN0cm9rZS5n ZXRLZXlTdHJva2UoDQotICAgICAgICAgICAgICAgIEtleUV2ZW50LlZLX1MsIERFRkFVTFRfTUFT SyksIA0KKyAgICAgICAgICAgICAgICBLZXlFdmVudC5WS19TLCBERUZBVUxUX01BU0spLA0KICAg ICAgICAgICAgICAgICBQcm9qZWN0QnJvd3Nlci5nZXRJbnN0YW5jZSgpLmdldFNhdmVBY3Rpb24o KSk7DQogICAgICAgICBwdXREZWZhdWx0U2hvcnRjdXQoQUNUSU9OX1NBVkVfUFJPSkVDVF9BUywg bnVsbCwNCiAgICAgICAgICAgICAgICAgbmV3IEFjdGlvblNhdmVQcm9qZWN0QXMoKSk7DQpAQCAt NTg0LDcgKzU4NSw3IEBADQogICAgICAgICBwdXREZWZhdWx0U2hvcnRjdXQoQUNUSU9OX1BST0pF Q1RfU0VUVElOR1MsIG51bGwsDQogICAgICAgICAgICAgICAgIG5ldyBBY3Rpb25Qcm9qZWN0U2V0 dGluZ3MoKSk7DQogICAgICAgICBwdXREZWZhdWx0U2hvcnRjdXQoQUNUSU9OX1BBR0VfU0VUVVAs IG51bGwsIG5ldyBBY3Rpb25QYWdlU2V0dXAoKSk7DQotICAgICAgICBwdXREZWZhdWx0U2hvcnRj dXQoQUNUSU9OX1NBVkVfR1JBUEhJQ1MsIG51bGwsIA0KKyAgICAgICAgcHV0RGVmYXVsdFNob3J0 Y3V0KEFDVElPTl9TQVZFX0dSQVBISUNTLCBudWxsLA0KICAgICAgICAgICAgICAgICBuZXcgQWN0 aW9uU2F2ZUdyYXBoaWNzKCkpOw0KICAgICAgICAgcHV0RGVmYXVsdFNob3J0Y3V0KEFDVElPTl9T QVZFX0FMTF9HUkFQSElDUywgbnVsbCwNCiAgICAgICAgICAgICAgICAgbmV3IEFjdGlvblNhdmVB bGxHcmFwaGljcygpKTsNCkBAIC01OTQsNyArNTk1LDcgQEANCiANCiAgICAgICAgIC8vIGVkaXQg bWVudQ0KICAgICAgICAgcHV0RGVmYXVsdFNob3J0Y3V0KEFDVElPTl9TRUxFQ1RfQUxMLCBLZXlT dHJva2UuZ2V0S2V5U3Ryb2tlKA0KLSAgICAgICAgICAgICAgICBLZXlFdmVudC5WS19BLCBERUZB VUxUX01BU0spLCANCisgICAgICAgICAgICAgICAgS2V5RXZlbnQuVktfQSwgREVGQVVMVF9NQVNL KSwNCiAgICAgICAgICAgICAgICAgbmV3IEFjdGlvblNlbGVjdEFsbCgpKTsNCiAgICAgICAgIHB1 dERlZmF1bHRTaG9ydGN1dChBQ1RJT05fUkVETywgS2V5U3Ryb2tlLmdldEtleVN0cm9rZShLZXlF dmVudC5WS19ZLA0KICAgICAgICAgICAgICAgICBERUZBVUxUX01BU0spLCBQcm9qZWN0QWN0aW9u cy5nZXRJbnN0YW5jZSgpLmdldFJlZG9BY3Rpb24oKSk7DQpAQCAtNjA0LDcgKzYwNSw3IEBADQog ICAgICAgICAgICAgICAgIG5ldyBOYXZpZ2F0ZVRhcmdldEZvcndhcmRBY3Rpb24oKSk7DQogICAg ICAgICBwdXREZWZhdWx0U2hvcnRjdXQoQUNUSU9OX05BVklHQVRFX0JBQ0ssIG51bGwsDQogICAg ICAgICAgICAgICAgIG5ldyBOYXZpZ2F0ZVRhcmdldEJhY2tBY3Rpb24oKSk7DQotICAgICAgICBw dXREZWZhdWx0U2hvcnRjdXQoQUNUSU9OX1NFTEVDVF9JTlZFUlQsIG51bGwsIA0KKyAgICAgICAg cHV0RGVmYXVsdFNob3J0Y3V0KEFDVElPTl9TRUxFQ1RfSU5WRVJULCBudWxsLA0KICAgICAgICAg ICAgICAgICBuZXcgQWN0aW9uU2VsZWN0SW52ZXJ0KCkpOw0KICAgICAgICAgcHV0RGVmYXVsdFNo b3J0Y3V0KEFDVElPTl9QRVJTUEVDVElWRV9DT05GSUcsIG51bGwsDQogICAgICAgICAgICAgICAg IG5ldyBBY3Rpb25QZXJzcGVjdGl2ZUNvbmZpZygpKTsNCkBAIC02MTMsMTMgKzYxNCwxMyBAQA0K ICAgICAgICAgICAgICAgICBLZXlFdmVudC5WS19ERUxFVEUsIDApLCBQcm9qZWN0QWN0aW9ucy5n ZXRJbnN0YW5jZSgpDQogICAgICAgICAgICAgICAgIC5nZXRSZW1vdmVGcm9tRGlhZ3JhbUFjdGlv bigpKTsNCiAgICAgICAgIHB1dERlZmF1bHRTaG9ydGN1dChBQ1RJT05fREVMRVRFX01PREVMX0VM RU1FTlRTLCBLZXlTdHJva2UNCi0gICAgICAgICAgICAgICAgLmdldEtleVN0cm9rZShLZXlFdmVu dC5WS19ERUxFVEUsIERFRkFVTFRfTUFTSyksIA0KKyAgICAgICAgICAgICAgICAuZ2V0S2V5U3Ry b2tlKEtleUV2ZW50LlZLX0RFTEVURSwgREVGQVVMVF9NQVNLKSwNCiAgICAgICAgICAgICAgICAg QWN0aW9uRGVsZXRlTW9kZWxFbGVtZW50cy5nZXRUYXJnZXRGb2xsb3dlcigpKTsNCiANCiAgICAg ICAgIC8vIHZpZXcgbWVudQ0KICAgICAgICAgcHV0RGVmYXVsdFNob3J0Y3V0KEFDVElPTl9HT19U T19ESUFHUkFNLCBudWxsLCBuZXcgQWN0aW9uR290b0RpYWdyYW0oKSk7DQogICAgICAgICBwdXRE ZWZhdWx0U2hvcnRjdXQoQUNUSU9OX1pPT01fUkVTRVQsIG51bGwsIG5ldyBab29tQWN0aW9uKDAu MCkpOw0KLSAgICAgICAgDQorDQogICAgICAgICBMaXN0IGdyaWRBY3Rpb25zID0gQWN0aW9uQWRq dXN0R3JpZC5jcmVhdGVBZGp1c3RHcmlkQWN0aW9ucyh0cnVlKTsNCiAgICAgICAgIEl0ZXJhdG9y IGkgPSBncmlkQWN0aW9ucy5pdGVyYXRvcigpOw0KICAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgp KSB7DQpAQCAtNjI3LDcgKzYyOCw3IEBADQogICAgICAgICAgICAgcHV0RGVmYXVsdFNob3J0Y3V0 KEFDVElPTl9BREpVU1RfR1JJRCArIGNtZEFHLmdldFZhbHVlKCJJRCIpLA0KICAgICAgICAgICAg ICAgICAgICAgKEtleVN0cm9rZSkgY21kQUcuZ2V0VmFsdWUoInNob3J0Y3V0IiksIGNtZEFHKTsN CiAgICAgICAgIH0NCi0gICAgICAgIA0KKw0KICAgICAgICAgTGlzdCBzbmFwQWN0aW9ucyA9IEFj dGlvbkFkanVzdFNuYXAuY3JlYXRlQWRqdXN0U25hcEFjdGlvbnMoKTsNCiAgICAgICAgIGkgPSBz bmFwQWN0aW9ucy5pdGVyYXRvcigpOw0KICAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKSB7DQpA QCAtNjU0LDEzICs2NTUsMTMgQEANCiAgICAgICAgIC8vIGNyZWF0ZSBtZW51DQogICAgICAgICBw dXREZWZhdWx0U2hvcnRjdXQoQUNUSU9OX1VTRV9DQVNFX0RJQUdSQU0sIG51bGwsDQogICAgICAg ICAgICAgICAgIG5ldyBBY3Rpb25Vc2VDYXNlRGlhZ3JhbSgpKTsNCi0gICAgICAgIHB1dERlZmF1 bHRTaG9ydGN1dChBQ1RJT05fQ0xBU1NfRElBR1JBTSwgbnVsbCwgDQorICAgICAgICBwdXREZWZh dWx0U2hvcnRjdXQoQUNUSU9OX0NMQVNTX0RJQUdSQU0sIG51bGwsDQogICAgICAgICAgICAgICAg IG5ldyBBY3Rpb25DbGFzc0RpYWdyYW0oKSk7DQogICAgICAgICBwdXREZWZhdWx0U2hvcnRjdXQo QUNUSU9OX1NFUVVFTkNFX0RJQUdSQU0sIG51bGwsDQogICAgICAgICAgICAgICAgIG5ldyBBY3Rp b25TZXF1ZW5jZURpYWdyYW0oKSk7DQogICAgICAgICBwdXREZWZhdWx0U2hvcnRjdXQoQUNUSU9O X0NPTExBQk9SQVRJT05fRElBR1JBTSwgbnVsbCwNCiAgICAgICAgICAgICAgICAgbmV3IEFjdGlv bkNvbGxhYm9yYXRpb25EaWFncmFtKCkpOw0KLSAgICAgICAgcHV0RGVmYXVsdFNob3J0Y3V0KEFD VElPTl9TVEFURV9ESUFHUkFNLCBudWxsLCANCisgICAgICAgIHB1dERlZmF1bHRTaG9ydGN1dChB Q1RJT05fU1RBVEVfRElBR1JBTSwgbnVsbCwNCiAgICAgICAgICAgICAgICAgbmV3IEFjdGlvblN0 YXRlRGlhZ3JhbSgpKTsNCiAgICAgICAgIHB1dERlZmF1bHRTaG9ydGN1dChBQ1RJT05fQUNUSVZJ VFlfRElBR1JBTSwgbnVsbCwNCiAgICAgICAgICAgICAgICAgbmV3IEFjdGlvbkFjdGl2aXR5RGlh Z3JhbSgpKTsNCkBAIC02NzksNyArNjgwLDcgQEANCiAgICAgICAgIC8vIGNyaXRpcXVlIG1lbnUN CiAgICAgICAgIC8vIFRPRE86IFRoaXMgZGVwZW5kZW5jeSBzaG91bGQgYmUgaW52ZXJ0ZWQgd2l0 aCB0aGUgQ3JpdGljcyBzdWJzeXN0ZW0NCiAgICAgICAgIC8vIHJlZ2lzdGVyaW5nIGl0cyBkZXNp cmVkIHNob3J0Y3V0cyB3aXRoIHVzIC0gdGZtDQotICAgICAgICBwdXREZWZhdWx0U2hvcnRjdXQo QUNUSU9OX0FVVE9fQ1JJVElRVUUsIG51bGwsIA0KKyAgICAgICAgcHV0RGVmYXVsdFNob3J0Y3V0 KEFDVElPTl9BVVRPX0NSSVRJUVVFLCBudWxsLA0KICAgICAgICAgICAgICAgICBuZXcgQWN0aW9u QXV0b0NyaXRpcXVlKCkpOw0KICAgICAgICAgcHV0RGVmYXVsdFNob3J0Y3V0KEFDVElPTl9PUEVO X0RFQ0lTSU9OUywgbnVsbCwNCiAgICAgICAgICAgICAgICAgbmV3IEFjdGlvbk9wZW5EZWNpc2lv bnMoKSk7DQpAQCAtNjg5LDcgKzY5MCw3IEBADQogICAgICAgICAvLyBoZWxwIG1lbnUNCiAgICAg ICAgIHB1dERlZmF1bHRTaG9ydGN1dChBQ1RJT05fU1lTVEVNX0lORk9STUFUSU9OLCBudWxsLA0K ICAgICAgICAgICAgICAgICBuZXcgQWN0aW9uU3lzdGVtSW5mbygpKTsNCi0gICAgICAgIHB1dERl ZmF1bHRTaG9ydGN1dChBQ1RJT05fQUJPVVRfQVJHT1VNTCwgbnVsbCwgDQorICAgICAgICBwdXRE ZWZhdWx0U2hvcnRjdXQoQUNUSU9OX0FCT1VUX0FSR09VTUwsIG51bGwsDQogICAgICAgICAgICAg ICAgIG5ldyBBY3Rpb25BYm91dEFyZ29VTUwoKSk7DQogDQogICAgICAgICAvLyBhcnJhbmdlIG1l bnUNCkBAIC03MDIsMTAgKzcwMywxMCBAQA0KICAgICAgICAgcHV0RGVmYXVsdFNob3J0Y3V0KEFD VElPTl9BTElHTl9CT1RUT01TLCBudWxsLCBuZXcgQWxpZ25BY3Rpb24oDQogICAgICAgICAgICAg ICAgIEFsaWduQWN0aW9uLkFMSUdOX0JPVFRPTVMpKTsNCiAgICAgICAgIHB1dERlZmF1bHRTaG9y dGN1dChBQ1RJT05fQUxJR05fUklHSFRTLCBLZXlTdHJva2UuZ2V0S2V5U3Ryb2tlKA0KLSAgICAg ICAgICAgICAgICBLZXlFdmVudC5WS19SLCBERUZBVUxUX01BU0spLCANCisgICAgICAgICAgICAg ICAgS2V5RXZlbnQuVktfUiwgREVGQVVMVF9NQVNLKSwNCiAgICAgICAgICAgICAgICAgbmV3IEFs aWduQWN0aW9uKEFsaWduQWN0aW9uLkFMSUdOX1JJR0hUUykpOw0KICAgICAgICAgcHV0RGVmYXVs dFNob3J0Y3V0KEFDVElPTl9BTElHTl9MRUZUUywgS2V5U3Ryb2tlLmdldEtleVN0cm9rZSgNCi0g ICAgICAgICAgICAgICAgS2V5RXZlbnQuVktfTCwgREVGQVVMVF9NQVNLKSwgDQorICAgICAgICAg ICAgICAgIEtleUV2ZW50LlZLX0wsIERFRkFVTFRfTUFTSyksDQogICAgICAgICAgICAgICAgIG5l dyBBbGlnbkFjdGlvbihBbGlnbkFjdGlvbi5BTElHTl9MRUZUUykpOw0KICAgICAgICAgcHV0RGVm YXVsdFNob3J0Y3V0KEFDVElPTl9BTElHTl9IX0NFTlRFUlMsIG51bGwsIG5ldyBBbGlnbkFjdGlv bigNCiAgICAgICAgICAgICAgICAgQWxpZ25BY3Rpb24uQUxJR05fSF9DRU5URVJTKSk7DQpAQCAt NzQzLDggKzc0NCw4IEBADQogICAgICAgICAgICAgICAgICAgICAgICAgUmVvcmRlckFjdGlvbi5T RU5EX1RPX0JBQ0spKTsNCiANCiAJLy8gaGVscCBtZW51DQotCXB1dERlZmF1bHRTaG9ydGN1dChB Q1RJT05fSEVMUCwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5U3Ryb2tlLmdldEtl eVN0cm9rZSggS2V5RXZlbnQuVktfRjEsIDApLCANCisJcHV0RGVmYXVsdFNob3J0Y3V0KEFDVElP Tl9IRUxQLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleVN0cm9rZS5nZXRLZXlTdHJv a2UoIEtleUV2ZW50LlZLX0YxLCAwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcg QWN0aW9uSGVscCgpKTsNCiAgICAgfQ0KIH0NCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1s LWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvZXhwbG9yZXIvQWN0aW9uRGVwbG95UHJvZmlsZS5qYXZh DQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3Ry dW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvZXhwbG9yZXIvQWN0aW9uRGVw bG95UHJvZmlsZS5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3 DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29y Zy9hcmdvdW1sL3VpL2V4cGxvcmVyL0FjdGlvbkRlcGxveVByb2ZpbGUuamF2YQkob3JpZ2luYWwp DQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9leHBsb3Jlci9B Y3Rpb25EZXBsb3lQcm9maWxlLmphdmEJMjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMSw2 ICsxLDYgQEANCiAvKiAkSWQkDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0 IChjKSAyMDA5LTIwMTAgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChj KSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNl cnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFy ZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExp Y2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQg aXMgYXZhaWxhYmxlIGF0DQpAQCAtNDIsMTEgKzQyLDEyIEBADQogaW1wb3J0IGphdmEuYXd0LmV2 ZW50LkFjdGlvbkV2ZW50Ow0KIGltcG9ydCBqYXZhLmlvLkZpbGU7DQogaW1wb3J0IGphdmEudXRp bC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQg amF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KIA0KIGltcG9ydCBqYXZheC5zd2luZy5BYnN0cmFj dEFjdGlvbjsNCiBpbXBvcnQgamF2YXguc3dpbmcuSkZpbGVDaG9vc2VyOw0KIA0KLWltcG9ydCBv cmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwuaTE4bi5UcmFuc2xh dG9yOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5tb2RlbC5Nb2RlbDsNCiBpbXBvcnQgb3JnLmFyZ291 bWwucGVyc2lzdGVuY2UuUGVyc2lzdGVuY2VNYW5hZ2VyOw0KQEAgLTY0LDE5ICs2NSwxOSBAQA0K ICAqIGl0IChwb2ludGxlc3MsIGJlY2F1c2UgYSBwcm9maWxlIGNhbm5vdCBiZSBhcHBsaWVkIHRv IGl0c2VsZiksIGFuZCBhbHNvIGRvbid0DQogICogY2hhbmdlIHRoZSBjb25maWd1cmF0aW9uIChz byBpdCB3aWxsIG9ubHkgYmUgbG9hZGVkIG9uIGV2ZXJ5IHN0YXJ0dXAgd2hlbiBpdA0KICAqIGlz IGRlcGxveWVkIGludG8gYSBkZWZhdWx0IHByb2ZpbGUgZGlyZWN0b3J5KS4NCi0gKiANCisgKg0K ICAqIEBhdXRob3IgVGhvbWFzIE5ldXN0dXBueQ0KICAqLw0KIHB1YmxpYyBjbGFzcyBBY3Rpb25E ZXBsb3lQcm9maWxlIGV4dGVuZHMgQWJzdHJhY3RBY3Rpb24gew0KIA0KLSAgICBwcml2YXRlIHN0 YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyDQotICAgICAgICAgICAgLmdldExvZ2dlcihB Y3Rpb25EZXBsb3lQcm9maWxlLmNsYXNzKTsNCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9n Z2VyIExPRyA9DQorICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKEFjdGlvbkRlcGxveVByb2ZpbGUu Y2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgcHJpdmF0ZSBPYmplY3QgdW5kZXBsb3llZFByb2Zp bGU7DQogDQogICAgIC8qKg0KICAgICAgKiBEZWZhdWx0IENvbnN0cnVjdG9yDQotICAgICAqIA0K KyAgICAgKg0KICAgICAgKiBAcGFyYW0gcHJvZmlsZSB0aGUgc2VsZWN0ZWQgcHJvZmlsZQ0KICAg ICAgKi8NCiAgICAgcHVibGljIEFjdGlvbkRlcGxveVByb2ZpbGUoT2JqZWN0IHByb2ZpbGUpIHsN CkBAIC0xMDgsMTMgKzEwOSwxMyBAQA0KICAgICAgICAgICAgIHByb2ZpbGVNYW5hZ2VyLnJlZ2lz dGVyUHJvZmlsZShuZXcgVXNlckRlZmluZWRQcm9maWxlKGYsDQogICAgICAgICAgICAgICAgIHBy b2ZpbGVNYW5hZ2VyKSk7DQogICAgICAgICB9IGNhdGNoIChQcm9maWxlRXhjZXB0aW9uIGUpIHsN Ci0gICAgICAgICAgICBMT0cud2FybigiZmFpbGVkIHRvIGxvYWQgcHJvZmlsZSBmcm9tIGZpbGUg IiArIGYuZ2V0UGF0aCgpLCBlKTsNCisgICAgICAgICAgICBMT0cubG9nKExldmVsLldBUk5JTkcs ICJmYWlsZWQgdG8gbG9hZCBwcm9maWxlIGZyb20gZmlsZSAiICsgZi5nZXRQYXRoKCksIGUpOw0K ICAgICAgICAgfQ0KICAgICB9DQogDQogICAgIC8qKg0KICAgICAgKiBPZmZlcnMgdGhlIHNhdmlu ZyBvZiB0aGUgcHJvZmlsZSBieSBwcmVzZW50aW5nIGEgZmlsZSBkaWFsb2cuDQotICAgICAqIA0K KyAgICAgKg0KICAgICAgKiBAcGFyYW0gZm4gdGhlIHN1Z2dlc3RlZCBkZWZhdWx0IHBhdGggZm9y IHRoZSBmaWxlIGRpYWxvZw0KICAgICAgKiBAcmV0dXJuIHRoZSBGaWxlIGluc3RhbmNlIHdoZXJl IHRoZSBwcm9maWxlIGlzIHNhdmVkLCBudWxsIG9uIGFib3J0DQogICAgICAqLw0KDQpNb2RpZmll ZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9leHBsb3Jlci9BY3Rp b25FeHBvcnRQcm9maWxlWE1JLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9z b3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3Vt bC91aS9leHBsb3Jlci9BY3Rpb25FeHBvcnRQcm9maWxlWE1JLmphdmE/dmlldz1kaWZmJnBhdGhy ZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRy dW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvZXhwbG9yZXIvQWN0aW9uRXhw b3J0UHJvZmlsZVhNSS5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1hcHAv c3JjL29yZy9hcmdvdW1sL3VpL2V4cGxvcmVyL0FjdGlvbkV4cG9ydFByb2ZpbGVYTUkuamF2YQky MDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAgKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0b3JzIC0g c2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0gc2Vl IGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNj b21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29tcGFu aWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNDQsMTIgKzQ0 LDEzIEBADQogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQogaW1wb3J0IGphdmEuaW8uT3V0 cHV0U3RyZWFtOw0KIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51 dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCiAN CiBpbXBvcnQgamF2YXguc3dpbmcuQWJzdHJhY3RBY3Rpb247DQogaW1wb3J0IGphdmF4LnN3aW5n LkpGaWxlQ2hvb3NlcjsNCiBpbXBvcnQgamF2YXguc3dpbmcuZmlsZWNob29zZXIuRmlsZUZpbHRl cjsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdv dW1sLmFwcGxpY2F0aW9uLmhlbHBlcnMuQXBwbGljYXRpb25WZXJzaW9uOw0KIGltcG9ydCBvcmcu YXJnb3VtbC5jb25maWd1cmF0aW9uLkNvbmZpZ3VyYXRpb247DQogaW1wb3J0IG9yZy5hcmdvdW1s LmkxOG4uVHJhbnNsYXRvcjsNCkBAIC02NCw3ICs2NSw3IEBADQogaW1wb3J0IG9yZy5hcmdvdW1s LnV0aWwuQXJnb0ZyYW1lOw0KIA0KIC8qKg0KLSAqIEV4cG9ydHMgdGhlIG1vZGVsIG9mIGEgc2Vs ZWN0ZWQgcHJvZmlsZSBhcyBYTUkNCisgKiBFeHBvcnRzIHRoZSBtb2RlbCBvZiBhIHNlbGVjdGVk IHByb2ZpbGUgYXMgWE1JLg0KICAqDQogICogQGF1dGhvciBNYXJjb3MgQXVyw6lsaW8NCiAgKi8N CkBAIC03MywxNCArNzQsMTQgQEANCiAgICAgLyoqDQogICAgICAqIExvZ2dlci4NCiAgICAgICov DQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dnZXINCi0gICAgICAg ICAgICAuZ2V0TG9nZ2VyKEFjdGlvbkV4cG9ydFByb2ZpbGVYTUkuY2xhc3MpOw0KKyAgICBwcml2 YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCisgICAgICAgIExvZ2dlci5nZXRMb2dnZXIo QWN0aW9uRXhwb3J0UHJvZmlsZVhNSS5jbGFzcy5nZXROYW1lKCkpOw0KIA0KICAgICBwcml2YXRl IFByb2ZpbGUgc2VsZWN0ZWRQcm9maWxlOw0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIERl ZmF1bHQgQ29uc3RydWN0b3INCi0gICAgICogDQorICAgICAqDQogICAgICAqIEBwYXJhbSBwcm9m aWxlIHRoZSBzZWxlY3RlZCBwcm9maWxlDQogICAgICAqLw0KICAgICBwdWJsaWMgQWN0aW9uRXhw b3J0UHJvZmlsZVhNSShQcm9maWxlIHByb2ZpbGUpIHsNCkBAIC04OCwxMyArODksMTMgQEANCiAg ICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9maWxlID0gcHJvZmlsZTsNCiAgICAgfQ0KIA0KLSAgICAN CisNCiAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGFyZzApIHsN CiAgICAgICAgIHRyeSB7DQotICAgICAgICAgICAgZmluYWwgQ29sbGVjdGlvbiBwcm9maWxlUGFj a2FnZXMgPSANCisgICAgICAgICAgICBmaW5hbCBDb2xsZWN0aW9uIHByb2ZpbGVQYWNrYWdlcyA9 DQogICAgICAgICAgICAgICAgIHNlbGVjdGVkUHJvZmlsZS5nZXRQcm9maWxlUGFja2FnZXMoKTsN CiAgICAgICAgICAgICBmaW5hbCBPYmplY3QgbW9kZWwgPSBwcm9maWxlUGFja2FnZXMuaXRlcmF0 b3IoKS5uZXh0KCk7DQotICAgICAgICAgICAgDQorDQogICAgICAgICAgICAgaWYgKG1vZGVsICE9 IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgRmlsZSBkZXN0aW55ID0gZ2V0VGFyZ2V0RmlsZSgp Ow0KICAgICAgICAgICAgICAgICBpZiAoZGVzdGlueSAhPSBudWxsKSB7DQpAQCAtMTAzLDExICsx MDQsMTEgQEANCiAgICAgICAgICAgICB9DQogICAgICAgICB9IGNhdGNoIChQcm9maWxlRXhjZXB0 aW9uIGUpIHsNCiAgICAgICAgICAgICAvLyBUT0RPOiBXZSBzaG91bGQgYmUgZ2l2aW5nIHRoZSB1 c2VyIG1vcmUgZGlyZWN0IGZlZWRiYWNrDQotICAgICAgICAgICAgTE9HLmVycm9yKCJFeGNlcHRp b24iLCBlKTsNCisgICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwgIkV4Y2VwdGlvbiIs IGUpOw0KICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KLSAgICAgICAgICAgIExP Ry5lcnJvcigiRXhjZXB0aW9uIiwgZSk7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZF UkUsICJFeGNlcHRpb24iLCBlKTsNCiAgICAgICAgIH0gY2F0Y2ggKFVtbEV4Y2VwdGlvbiBlKSB7 DQotICAgICAgICAgICAgTE9HLmVycm9yKCJFeGNlcHRpb24iLCBlKTsNCisgICAgICAgICAgICBM T0cubG9nKExldmVsLlNFVkVSRSwgIkV4Y2VwdGlvbiIsIGUpOw0KICAgICAgICAgfQ0KICAgICB9 DQogDQpAQCAtMTE1LDggKzExNiw4IEBADQogICAgIHByaXZhdGUgdm9pZCBzYXZlTW9kZWwoRmls ZSBkZXN0aW55LCBPYmplY3QgbW9kZWwpIHRocm93cyBJT0V4Y2VwdGlvbiwNCiAgICAgICAgICAg ICBVbWxFeGNlcHRpb24gew0KICAgICAgICAgT3V0cHV0U3RyZWFtIHN0cmVhbSA9IG5ldyBGaWxl T3V0cHV0U3RyZWFtKGRlc3RpbnkpOw0KLSAgICAgICAgWG1pV3JpdGVyIHhtaVdyaXRlciA9IA0K LSAgICAgICAgICAgIE1vZGVsLmdldFhtaVdyaXRlcihtb2RlbCwgc3RyZWFtLCANCisgICAgICAg IFhtaVdyaXRlciB4bWlXcml0ZXIgPQ0KKyAgICAgICAgICAgIE1vZGVsLmdldFhtaVdyaXRlciht b2RlbCwgc3RyZWFtLA0KICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25WZXJzaW9uLmdl dFZlcnNpb24oKSArICIoIg0KICAgICAgICAgICAgICAgICAgICAgICAgICsgVW1sRmlsZVBlcnNp c3Rlci5QRVJTSVNURU5DRV9WRVJTSU9OICsgIikiKTsNCiAgICAgICAgIHhtaVdyaXRlci53cml0 ZSgpOw0KQEAgLTE2MywxMyArMTY0LDEzIEBADQogICAgICAgICAgICAgICAgIHJldHVybiB0aGVG aWxlOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCi0gICAgICAgIA0KKw0KICAgICAgICAg cmV0dXJuIG51bGw7DQogICAgIH0NCi0gICAgDQorDQogICAgIHByaXZhdGUgc3RhdGljIGJvb2xl YW4gaXNYbWlGaWxlKEZpbGUgZmlsZSkgew0KICAgICAgICAgcmV0dXJuIGZpbGUuaXNGaWxlKCkN Ci0gICAgICAgICAgICAgICAgJiYgKGZpbGUuZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCkuZW5kc1dp dGgoIi54bWwiKSANCisgICAgICAgICAgICAgICAgJiYgKGZpbGUuZ2V0TmFtZSgpLnRvTG93ZXJD YXNlKCkuZW5kc1dpdGgoIi54bWwiKQ0KICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGZpbGUu Z2V0TmFtZSgpLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi54bWkiKSk7DQogICAgIH0NCiB9DQoN Ck1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL2V4cGxv cmVyL0RuREV4cGxvcmVyVHJlZS5qYXZhDQpVcmw6IGh0dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcv c291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291 bWwvdWkvZXhwbG9yZXIvRG5ERXhwbG9yZXJUcmVlLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5 MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3Ny Yy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvZXhwbG9yZXIvRG5ERXhwbG9yZXJUcmVl LmphdmEJKG9yaWdpbmFsKQ0KKysrIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291 bWwvdWkvZXhwbG9yZXIvRG5ERXhwbG9yZXJUcmVlLmphdmEJMjAxMi0xMi0zMCAwNTowNjowMS0w ODAwDQpAQCAtMSw2ICsxLDYgQEANCiAvKiAkSWQkDQogICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQot ICogQ29weXJpZ2h0IChjKSAyMDA5IENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KKyAqIENvcHly aWdodCAoYykgMjAwOS0yMDEyIENvbnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KICAqIEFsbCByaWdo dHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMN CiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1 YmxpYyBMaWNlbnNlIHYxLjANCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlv biwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KQEAgLTcyLDYgKzcyLDggQEANCiBpbXBvcnQgamF2YS5p by5JT0V4Y2VwdGlvbjsNCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCiBpbXBvcnQgamF2 YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2lt cG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQogaW1wb3J0IGphdmF4LnN3aW5nLklj b247DQogaW1wb3J0IGphdmF4LnN3aW5nLkpMYWJlbDsNCkBAIC04Miw3ICs4NCw2IEBADQogaW1w b3J0IGphdmF4LnN3aW5nLnRyZWUuRGVmYXVsdE11dGFibGVUcmVlTm9kZTsNCiBpbXBvcnQgamF2 YXguc3dpbmcudHJlZS5UcmVlUGF0aDsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dn ZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLm1vZGVsLk1vZGVsOw0KIGltcG9ydCBvcmcuYXJnb3Vt bC51aS5UcmFuc2ZlcmFibGVNb2RlbEVsZW1lbnRzOw0KIGltcG9ydCBvcmcuYXJnb3VtbC51aS50 YXJnZXRtYW5hZ2VyLlRhcmdldE1hbmFnZXI7DQpAQCAtOTEsOSArOTIsOSBAQA0KIA0KIC8qKg0K ICAqIFRoaXMgY2xhc3MgZXh0ZW5kcyB0aGUgZGVmYXVsdCBBcmdvIEpUcmVlIHdpdGggRHJhZyBh bmQgZHJvcCBjYXBhYmlsaXRpZXMuPHA+DQotICogU2VlIDxhIA0KKyAqIFNlZSA8YQ0KICAqIGhy ZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2d1aWRlL2RyYWduZHJvcC9z cGVjL2RuZDEuaHRtbCI+DQotICogZG5kMTwvYT4gYW5kIDxhIA0KKyAqIGRuZDE8L2E+IGFuZCA8 YQ0KICAqIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vcHJvZHVjdHMvamZjL3RzYy9hcnRpY2xl cy9kcmFnbmRyb3AvaW5kZXguaHRtbCI+DQogICogZG5kMjwvYT48cD4NCiAgKg0KQEAgLTEwMSwx MSArMTAyLDExIEBADQogICogPGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuMy9k b2NzL2d1aWRlL3N3aW5nL0tleUJpbmRDaGFuZ2VzLmh0bWwiPg0KICAqIEtleUJpbmRDaGFuZ2Vz PC9hPjxwPg0KICAqDQotICogVGhlIGdob3N0ZWQgaW1hZ2VzIGNvZGUgb3JpZ2luYXRlcyBmcm9t IDxwPjxhIA0KKyAqIFRoZSBnaG9zdGVkIGltYWdlcyBjb2RlIG9yaWdpbmF0ZXMgZnJvbSA8cD48 YQ0KICAqIGhyZWY9Imh0dHA6Ly93d3cuamF2YXdvcmxkLmNvbS9qYXZhd29ybGQvamF2YXRpcHMv anctamF2YXRpcDExNC5odG1sIj4NCiAgKiBqYXZhdGlwMTE0PC9hPjxwPg0KICAqDQotICogSW50 ZXJlc3RpbmcgbWF5IGFsc28gYmUgdGhlIGZvbGxvd2luZzogPHA+PGEgDQorICogSW50ZXJlc3Rp bmcgbWF5IGFsc28gYmUgdGhlIGZvbGxvd2luZzogPHA+PGENCiAgKiBocmVmPSJodHRwOi8vZm9y dW0uamF2YS5zdW4uY29tL3RocmVhZC5qc3BhP3RocmVhZElEPTI5NjI1NSZzdGFydD0zMCI+DQog ICogdGhyZWFkPC9hPg0KICAqDQpAQCAtMTIxLDcgKzEyMiw3IEBADQogICAgICAqIExvZ2dlci4N CiAgICAgICovDQogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KLSAgICAJ TG9nZ2VyLmdldExvZ2dlcihEbkRFeHBsb3JlclRyZWUuY2xhc3MpOw0KKyAgICAgICAgTG9nZ2Vy LmdldExvZ2dlcihEbkRFeHBsb3JlclRyZWUuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgcHJp dmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERJQUdSQU1fVE9fQ0xJUEJPQVJEX0FDVElPTiA9DQog ICAgICAgICAiZXhwb3J0IERpYWdyYW0gYXMgR0lGIjsNCkBAIC0xMzAsMTAgKzEzMSwxMiBAQA0K ICAgICAgKiBXaGVyZSwgaW4gdGhlIGRyYWcgaW1hZ2UsIHRoZSBtb3VzZSB3YXMgY2xpY2tlZC4N CiAgICAgICovDQogICAgIHByaXZhdGUgUG9pbnQJY2xpY2tPZmZzZXQgPSBuZXcgUG9pbnQoKTsN CisNCiAgICAgLyoqDQogICAgICAqIFRoZSBwYXRoIGJlaW5nIGRyYWdnZWQuDQogICAgICAqLw0K ICAgICBwcml2YXRlIFRyZWVQYXRoCQlzb3VyY2VQYXRoOw0KKw0KICAgICAvKioNCiAgICAgICog VGhlICdkcmFnIGltYWdlJy4NCiAgICAgICovDQpAQCAtMTkxLDEwICsxOTQsMTAgQEANCiAgICAg ICogVGhlIHR5cGljYWwgcmVzcG9uc2UgaXMgdG8gaW5pdGlhdGUgYSBkcmFnIGJ5IGludm9raW5n DQogICAgICAqIERyYWdTb3VyY2Uuc3RhcnREcmFnKCkuDQogICAgICAqIDxwPg0KLSAgICAgKiAN CisgICAgICoNCiAgICAgICogVE9ETzogZmluZCBhIHdheSB0byBzaG93IGEgZGlmZmVyZW50IGlt YWdlIHdoZW4gbXVsdGlwbGUgZWxlbWVudHMgYXJlDQogICAgICAqIGRyYWdnZWQuDQotICAgICAq IA0KKyAgICAgKg0KICAgICAgKiBAcGFyYW0gZHJhZ0dlc3R1cmVFdmVudA0KICAgICAgKiAgICAg ICAgICAgIHRoZSBEcmFnR2VzdHVyZUV2ZW50IGRlc2NyaWJpbmcgdGhlIGdlc3R1cmUgdGhhdCBo YXMganVzdA0KICAgICAgKiAgICAgICAgICAgIG9jY3VycmVkDQpAQCAtMjExLDEwICsyMTQsOSBA QA0KICAgICAgICAgaWYgKHRhcmdldHMuc2l6ZSgpIDwgMSkgew0KICAgICAgICAgICAgIHJldHVy bjsNCiAgICAgICAgIH0NCi0gICAgICAgIGlmIChMT0cuaXNEZWJ1Z0VuYWJsZWQoKSkgew0KLSAg ICAgICAgICAgIExPRy5kZWJ1ZygiRHJhZzogc3RhcnQgdHJhbnNmZXJyaW5nICIgKyB0YXJnZXRz LnNpemUoKQ0KLSAgICAgICAgICAgICAgICAgICAgKyAiIHRhcmdldHMuIik7DQotICAgICAgICB9 DQorDQorICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJEcmFnOiBzdGFydCB0cmFuc2ZlcnJp bmcgezB9IHRhcmdldHMuIiwgdGFyZ2V0cy5zaXplKCkpOw0KKw0KICAgICAgICAgVHJhbnNmZXJh YmxlTW9kZWxFbGVtZW50cyB0ZiA9DQogICAgICAgICAgICAgbmV3IFRyYW5zZmVyYWJsZU1vZGVs RWxlbWVudHModGFyZ2V0cyk7DQogDQpAQCAtMjk1LDE2ICsyOTcsMTYgQEANCiAgICAgcHJpdmF0 ZSBib29sZWFuIGlzVmFsaWREcmFnKFRyZWVQYXRoIGRlc3RpbmF0aW9uUGF0aCwNCiAgICAgCQlU cmFuc2ZlcmFibGUgdGYpIHsNCiAgICAgICAgIGlmIChkZXN0aW5hdGlvblBhdGggPT0gbnVsbCkg ew0KLSAgICAgICAgICAgIExPRy5kZWJ1ZygiTm8gdmFsaWQgRHJhZzogbm8gZGVzdGluYXRpb24g Zm91bmQuIik7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiTm8gdmFsaWQgRHJh Zzogbm8gZGVzdGluYXRpb24gZm91bmQuIik7DQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0K ICAgICAgICAgfQ0KICAgICAgICAgaWYgKHNlbGVjdGVkVHJlZVBhdGguaXNEZXNjZW5kYW50KGRl c3RpbmF0aW9uUGF0aCkpIHsNCi0gICAgICAgICAgICBMT0cuZGVidWcoIk5vIHZhbGlkIERyYWc6 IG1vdmUgdG8gZGVzY2VuZGVudC4iKTsNCisgICAgICAgICAgICBMT0cubG9nKExldmVsLkZJTkUs ICJObyB2YWxpZCBEcmFnOiBtb3ZlIHRvIGRlc2NlbmRlbnQuIik7DQogICAgICAgICAgICAgcmV0 dXJuIGZhbHNlOw0KICAgICAgICAgfQ0KICAgICAgICAgaWYgKCF0Zi5pc0RhdGFGbGF2b3JTdXBw b3J0ZWQoDQogICAgICAgICAgICAgICAgIFRyYW5zZmVyYWJsZU1vZGVsRWxlbWVudHMuVU1MX0NP TExFQ1RJT05fRkxBVk9SKSkgew0KLSAgICAgICAgICAgIExPRy5kZWJ1ZygiTm8gdmFsaWQgRHJh ZzogZmxhdm9yIG5vdCBzdXBwb3J0ZWQuIik7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5G SU5FLCAiTm8gdmFsaWQgRHJhZzogZmxhdm9yIG5vdCBzdXBwb3J0ZWQuIik7DQogICAgICAgICAg ICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgfQ0KICAgICAgICAgT2JqZWN0IGRlc3QgPQ0KQEAg LTMxOCwxMyArMzIwLDEzIEBADQogDQogICAgICAgICAvKiBJZiB0aGUgZGVzdGluYXRpb24gaXMg bm90IGEgTmFtZVNwYWNlLCB0aGVuIGFib3J0OiAqLw0KICAgICAgICAgaWYgKCFNb2RlbC5nZXRG YWNhZGUoKS5pc0FOYW1lc3BhY2UoZGVzdCkpIHsNCi0gICAgICAgICAgICBMT0cuZGVidWcoIk5v IHZhbGlkIERyYWc6IG5vdCBhIG5hbWVzcGFjZS4iKTsNCisgICAgICAgICAgICBMT0cubG9nKExl dmVsLkZJTkUsICJObyB2YWxpZCBEcmFnOiBub3QgYSBuYW1lc3BhY2UuIik7DQogICAgICAgICAg ICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgfQ0KIA0KICAgICAgICAgLyogV2UgYXJlIHN1cmUg ImRlc3QiIGlzIGEgTmFtZXNwYWNlIG5vdy4gKi8NCiAgICAgICAgIGlmIChNb2RlbC5nZXRNb2Rl bE1hbmFnZW1lbnRIZWxwZXIoKS5pc1JlYWRPbmx5KGRlc3QpKSB7DQotICAgICAgICAgICAgTE9H LmRlYnVnKCJObyB2YWxpZCBEcmFnOiAiDQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5F LCAiTm8gdmFsaWQgRHJhZzogIg0KICAgICAgICAgICAgICAgICAgICAgKyAidGhpcyBpcyBub3Qg YW4gZWRpdGFibGUgVU1MIGVsZW1lbnQgKHByb2ZpbGU/KS4iKTsNCiAgICAgICAgICAgICByZXR1 cm4gZmFsc2U7DQogICAgICAgICB9DQpAQCAtMzMzLDIwICszMzUsMjAgQEANCiANCiAgICAgICAg IC8vIFRPRE86IEFueSBOYW1lc3BhY2UgY2FuIGNvbnRhaW4gb3RoZXIgZWxlbWVudHMuICBXaHkg ZG9uJ3Qgd2UgYWxsb3cNCiAgICAgICAgIC8vIHRoaXM/IC0gdGZtDQotICAgICAgICAvKiANCisg ICAgICAgIC8qDQogICAgICAgICAgKiBNVlc6IFRoZXNlIGFyZSB0aGUgV0ZScyBmb3IgRGF0YVR5 cGU6DQotICAgICAgICAgKiBbMV0gQSBEYXRhVHlwZSBjYW4gb25seSBjb250YWluIE9wZXJhdGlv bnMsIA0KKyAgICAgICAgICogWzFdIEEgRGF0YVR5cGUgY2FuIG9ubHkgY29udGFpbiBPcGVyYXRp b25zLA0KICAgICAgICAgICogd2hpY2ggYWxsIG11c3QgYmUgcXVlcmllcy4NCiAgICAgICAgICAq IHNlbGYuYWxsRmVhdHVyZXMtPmZvckFsbChmIHwNCi0gICAgICAgICAqICBmLm9jbElzS2luZE9m KE9wZXJhdGlvbikgYW5kIGYub2NsQXNUeXBlKE9wZXJhdGlvbikuaXNRdWVyeSkgDQorICAgICAg ICAgKiAgZi5vY2xJc0tpbmRPZihPcGVyYXRpb24pIGFuZCBmLm9jbEFzVHlwZShPcGVyYXRpb24p LmlzUXVlcnkpDQogICAgICAgICAgKiBbMl0gQSBEYXRhVHlwZSBjYW5ub3QgY29udGFpbiBhbnkg b3RoZXIgTW9kZWxFbGVtZW50cy4NCiAgICAgICAgICAqICBzZWxmLmFsbENvbnRlbnRzLT5pc0Vt cHR5DQogICAgICAgICAgKiAgSU1ITyB3ZSBzaG91bGQgZW5mb3JjZSB0aGVzZSBXRlJzIGhlcmUu DQogICAgICAgICAgKiAgLi4uIHNvIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIGNvcHkgb3IgbW92 ZSBxdWVyeSBvcGVyYXRpb25zLA0KLSAgICAgICAgICogIGhlbmNlIHdlIHNob3VsZCBhbGxvdyB0 aGlzLiANCisgICAgICAgICAqICBoZW5jZSB3ZSBzaG91bGQgYWxsb3cgdGhpcy4NCiAgICAgICAg ICAqLw0KICAgICAgICAgaWYgKE1vZGVsLmdldEZhY2FkZSgpLmlzQURhdGFUeXBlKGRlc3QpKSB7 DQotICAgICAgICAgICAgTE9HLmRlYnVnKCJObyB2YWxpZCBEcmFnOiBkZXN0aW5hdGlvbiBpcyBh IERhdGFUeXBlLiIpOw0KKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgIk5vIHZhbGlk IERyYWc6IGRlc3RpbmF0aW9uIGlzIGEgRGF0YVR5cGUuIik7DQogICAgICAgICAgICAgcmV0dXJu IGZhbHNlOw0KICAgICAgICAgfQ0KIA0KQEAgLTM2MiwxNCArMzY0LDE0IEBADQogICAgICAgICAg ICAgZm9yIChPYmplY3QgZWxlbWVudCA6IHRyYW5zZmVycykgew0KICAgICAgICAgICAgICAgICBp ZiAoTW9kZWwuZ2V0RmFjYWRlKCkuaXNBVU1MRWxlbWVudChlbGVtZW50KSkgew0KICAgICAgICAg ICAgICAgICAgICAgaWYgKCFNb2RlbC5nZXRNb2RlbE1hbmFnZW1lbnRIZWxwZXIoKS5pc1JlYWRP bmx5KGVsZW1lbnQpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1vZGVsLmdldEZh Y2FkZSgpLmlzQU1vZGVsRWxlbWVudChkZXN0KSANCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICYmIE1vZGVsLmdldEZhY2FkZSgpLmlzQU5hbWVzcGFjZShlbGVtZW50KSANCisgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoTW9kZWwuZ2V0RmFjYWRlKCkuaXNBTW9kZWxFbGVtZW50 KGRlc3QpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBNb2RlbC5nZXRGYWNh ZGUoKS5pc0FOYW1lc3BhY2UoZWxlbWVudCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICYmIE1vZGVsLmdldENvcmVIZWxwZXIoKS5pc1ZhbGlkTmFtZXNwYWNlKA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LCBkZXN0KSkgew0KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMT0cuZGVidWcoIlZhbGlkIERyYWc6IG5hbWVzcGFjZSAi ICsgZGVzdCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklO RSwgIlZhbGlkIERyYWc6IG5hbWVzcGFjZSB7MH0iLCBkZXN0KTsNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChNb2RlbC5nZXRGYWNhZGUoKS5pc0FGZWF0dXJlKGVs ZW1lbnQpIA0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNb2RlbC5nZXRGYWNhZGUoKS5p c0FGZWF0dXJlKGVsZW1lbnQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBN b2RlbC5nZXRGYWNhZGUoKS5pc0FDbGFzc2lmaWVyKGRlc3QpKSB7DQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgIH0NCkBA IC0zNzgsMTcgKzM4MCwxNyBAQA0KICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5j ZW9mIFJlbG9jYXRhYmxlKSB7DQogICAgICAgICAgICAgICAgICAgICBSZWxvY2F0YWJsZSBkID0g KFJlbG9jYXRhYmxlKSBlbGVtZW50Ow0KICAgICAgICAgICAgICAgICAgICAgaWYgKGQuaXNSZWxv Y2F0aW9uQWxsb3dlZChkZXN0KSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIExPRy5kZWJ1 ZygiVmFsaWQgRHJhZzogZGlhZ3JhbSAiICsgZGVzdCk7DQorICAgICAgICAgICAgICAgICAgICAg ICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiVmFsaWQgRHJhZzogZGlhZ3JhbSB7MH0iLCBkZXN0KTsN CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgICAgICAg ICAgIH0NCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0gY2F0 Y2ggKFVuc3VwcG9ydGVkRmxhdm9yRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICBMT0cuZGVi dWcoZSk7DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiIiwgZSk7DQogICAgICAg ICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgTE9HLmRlYnVnKGUpOw0K KyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgIiIsIGUpOw0KICAgICAgICAgfQ0KLSAg ICAgICAgTE9HLmRlYnVnKCJObyB2YWxpZCBEcmFnOiBub3QgYSB2YWxpZCBuYW1lc3BhY2UuIik7 DQorICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJObyB2YWxpZCBEcmFnOiBub3QgYSB2YWxp ZCBuYW1lc3BhY2UuIik7DQogICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgIH0NCiANCkBAIC01 NzcsNyArNTc5LDcgQEANCiAgICAgICAgICAqLw0KICAgICAgICAgcHVibGljIHZvaWQgZHJhZ0Vu dGVyKA0KICAgICAgICAgICAgICAgICBEcm9wVGFyZ2V0RHJhZ0V2ZW50IGRyb3BUYXJnZXREcmFn RXZlbnQpIHsNCi0gICAgICAgICAgICBMT0cuZGVidWcoImRyYWdFbnRlciIpOw0KKyAgICAgICAg ICAgIExPRy5sb2coTGV2ZWwuRklORSwgImRyYWdFbnRlciIpOw0KICAgICAgICAgICAgIGlmICgh aXNEcmFnQWNjZXB0YWJsZShkcm9wVGFyZ2V0RHJhZ0V2ZW50KSkgew0KICAgICAgICAgICAgICAg ICBkcm9wVGFyZ2V0RHJhZ0V2ZW50LnJlamVjdERyYWcoKTsNCiAgICAgICAgICAgICB9IGVsc2Ug ew0KQEAgLTU5MCw3ICs1OTIsNyBAQA0KICAgICAgICAgICogQHNlZSBqYXZhLmF3dC5kbmQuRHJv cFRhcmdldExpc3RlbmVyI2RyYWdFeGl0KGphdmEuYXd0LmRuZC5Ecm9wVGFyZ2V0RXZlbnQpDQog ICAgICAgICAgKi8NCiAgICAgICAgIHB1YmxpYyB2b2lkIGRyYWdFeGl0KERyb3BUYXJnZXRFdmVu dCBkcm9wVGFyZ2V0RXZlbnQpIHsNCi0gICAgICAgICAgICBMT0cuZGVidWcoImRyYWdFeGl0Iik7 DQorICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiZHJhZ0V4aXQiKTsNCiAgICAgICAg ICAgICBpZiAoIURyYWdTb3VyY2UuaXNEcmFnSW1hZ2VTdXBwb3J0ZWQoKSkgew0KICAgICAgICAg ICAgICAgICByZXBhaW50KGdob3N0UmVjdGFuZ2xlLmdldEJvdW5kcygpKTsNCiAgICAgICAgICAg ICB9DQpAQCAtNjA5LDcgKzYxMSw3IEBADQogICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAg ICAgICAgICB9DQogICAgICAgICAgICAgLyogTWFueSBtYW55IG9mIHRoZXNlIGV2ZW50cyAuLiB0 aGlzIHNsb3dzIHRoaW5ncyBkb3duOiAqLw0KLS8vICAgICAgICAgICAgTE9HLmRlYnVnKCJkcmFn T3ZlciIpOw0KKy8vICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiZHJhZ092ZXIiKTsN CiANCiAgICAgICAgICAgICBsYXN0TW91c2VMb2NhdGlvbiA9IHB0Ow0KIA0KQEAgLTcwMyw3ICs3 MDUsNyBAQA0KIA0KICAgICAgICAgICAgIC8qIElmIHRoZSBkZXN0aW5hdGlvbiBpcyBub3QgYSBO YW1lU3BhY2UsIHRoZW4gcmVqZWN0OiAqLw0KICAgICAgICAgICAgIGlmICghTW9kZWwuZ2V0RmFj YWRlKCkuaXNBTmFtZXNwYWNlKGRlc3QpKSB7DQotICAgICAgICAgICAgICAgIGlmIChMT0cuaXNE ZWJ1Z0VuYWJsZWQoKSkgew0KKyAgICAgICAgICAgICAgICBpZiAoTE9HLmlzTG9nZ2FibGUoTGV2 ZWwuRklORSkpIHsNCiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lOw0KICAgICAgICAg ICAgICAgICAgICAgaWYgKE1vZGVsLmdldEZhY2FkZSgpLmlzQVVNTEVsZW1lbnQoZGVzdCkpIHsN CiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gTW9kZWwuZ2V0RmFjYWRlKCkuZ2V0TmFt ZShkZXN0KTsNCkBAIC03MTIsOCArNzE0LDggQEANCiAgICAgICAgICAgICAgICAgICAgIH0gZWxz ZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGRlc3QudG9TdHJpbmcoKTsNCiAg ICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIExPRy5kZWJ1ZygiTm8g dmFsaWQgRHJhZzogIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChNb2RlbC5nZXRG YWNhZGUoKS5pc0FVTUxFbGVtZW50KGRlc3QpIA0KKyAgICAgICAgICAgICAgICAgICAgTE9HLmxv ZyhMZXZlbC5GSU5FLCAiTm8gdmFsaWQgRHJhZzogIg0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICArIChNb2RlbC5nZXRGYWNhZGUoKS5pc0FVTUxFbGVtZW50KGRlc3QpDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuYW1lICsgIiBub3QgYSBuYW1lc3BhY2UuIg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICIgbm90IGEgVU1MIGVsZW1l bnQuIikpOw0KICAgICAgICAgICAgICAgICB9DQpAQCAtNzIzLDE0ICs3MjUsMTQgQEANCiAgICAg ICAgICAgICAvKiBXZSBhcmUgc3VyZSAiZGVzdCIgaXMgYSBOYW1lc3BhY2Ugbm93LiAqLw0KIA0K ICAgICAgICAgICAgIGlmIChNb2RlbC5nZXRNb2RlbE1hbmFnZW1lbnRIZWxwZXIoKS5pc1JlYWRP bmx5KGRlc3QpKSB7DQotICAgICAgICAgICAgICAgIExPRy5kZWJ1ZygiTm8gdmFsaWQgRHJhZzog Ig0KKyAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJObyB2YWxpZCBEcmFnOiAi DQogICAgICAgICAgICAgICAgICAgICAgICAgKyAibm90IGFuIGVkaXRhYmxlIFVNTCBlbGVtZW50 IChwcm9maWxlPykuIik7DQogICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICB9 DQogDQogICAgICAgICAgICAgLyogSWYgdGhlIGRlc3RpbmF0aW9uIGlzIGEgRGF0YVR5cGUsIHRo ZW4gcmVqZWN0OiAqLw0KICAgICAgICAgICAgIGlmIChNb2RlbC5nZXRGYWNhZGUoKS5pc0FEYXRh VHlwZShkZXN0KSkgew0KLSAgICAgICAgICAgICAgICBMT0cuZGVidWcoIk5vIHZhbGlkIERyYWc6 IGRlc3RpbmF0aW9uIGlzIGEgRGF0YVR5cGUuIik7DQorICAgICAgICAgICAgICAgIExPRy5sb2co TGV2ZWwuRklORSwgIk5vIHZhbGlkIERyYWc6IGRlc3RpbmF0aW9uIGlzIGEgRGF0YVR5cGUuIik7 DQogICAgICAgICAgICAgICAgIGRyb3BUYXJnZXREcmFnRXZlbnQucmVqZWN0RHJhZygpOw0KICAg ICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgfQ0KQEAgLTc0NSw3ICs3NDcsNyBA QA0KICAgICAgICAgICogQHNlZSBqYXZhLmF3dC5kbmQuRHJvcFRhcmdldExpc3RlbmVyI2Ryb3Ao amF2YS5hd3QuZG5kLkRyb3BUYXJnZXREcm9wRXZlbnQpDQogICAgICAgICAgKi8NCiAgICAgICAg IHB1YmxpYyB2b2lkIGRyb3AoRHJvcFRhcmdldERyb3BFdmVudCBkcm9wVGFyZ2V0RHJvcEV2ZW50 KSB7DQotICAgICAgICAgICAgTE9HLmRlYnVnKCJkcm9wcGluZyAuLi4gIik7DQorICAgICAgICAg ICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiZHJvcHBpbmcgLi4uICIpOw0KICAgICAgICAgICAgIC8q IFByZXZlbnQgaG92ZXIgdGltZXIgZnJvbSBkb2luZyBhbiB1bndhbnRlZA0KICAgICAgICAgICAg ICAqIGV4cGFuZFBhdGggb3IgY29sbGFwc2VQYXRoOg0KICAgICAgICAgICAgICAqLw0KQEAgLTc2 NCw5ICs3NjYsOCBAQA0KICAgICAgICAgICAgICAgICAvL2dldCBuZXcgcGFyZW50IG5vZGUNCiAg ICAgICAgICAgICAgICAgUG9pbnQgbG9jID0gZHJvcFRhcmdldERyb3BFdmVudC5nZXRMb2NhdGlv bigpOw0KICAgICAgICAgICAgICAgICBUcmVlUGF0aCBkZXN0aW5hdGlvblBhdGggPSBnZXRQYXRo Rm9yTG9jYXRpb24obG9jLngsIGxvYy55KTsNCi0gICAgICAgICAgICAgICAgaWYgKExPRy5pc0Rl YnVnRW5hYmxlZCgpKSB7DQotICAgICAgICAgICAgICAgICAgICBMT0cuZGVidWcoIkRyb3AgbG9j YXRpb246IHg9IiArIGxvYy54ICsgIiB5PSIgKyBsb2MueSk7DQotICAgICAgICAgICAgICAgIH0N CisgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwg IkRyb3AgbG9jYXRpb246IHg9ezB9IHk9IHsxfSIgLCBuZXcgT2JqZWN0W117bG9jLngsbG9jLnl9 KTsNCiANCiAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRHJhZyhkZXN0aW5hdGlvblBhdGgs IHRyKSkgew0KICAgICAgICAgICAgICAgICAgICAgZHJvcFRhcmdldERyb3BFdmVudC5yZWplY3RE cm9wKCk7DQpAQCAtNzc3LDEwICs3NzgsOSBAQA0KICAgICAgICAgICAgICAgICBDb2xsZWN0aW9u IG1vZGVsRWxlbWVudHMgPQ0KICAgICAgICAgICAgICAgICAgICAgKENvbGxlY3Rpb24pIHRyLmdl dFRyYW5zZmVyRGF0YSgNCiAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2ZlcmFibGVNb2Rl bEVsZW1lbnRzLlVNTF9DT0xMRUNUSU9OX0ZMQVZPUik7DQotICAgICAgICAgICAgICAgIGlmIChM T0cuaXNEZWJ1Z0VuYWJsZWQoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgTE9HLmRlYnVnKCJ0 cmFuc2ZlciBkYXRhID0gIiArIG1vZGVsRWxlbWVudHMpOw0KLSAgICAgICAgICAgICAgICB9DQog ICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJ0 cmFuc2ZlciBkYXRhID0gezB9IiwgbW9kZWxFbGVtZW50cyk7DQorDQogICAgICAgICAgICAgICAg IE9iamVjdCBkZXN0ID0NCiAgICAgICAgICAgICAgICAgICAgICgoRGVmYXVsdE11dGFibGVUcmVl Tm9kZSkgZGVzdGluYXRpb25QYXRoDQogICAgICAgICAgICAgICAgICAgICAgICAgLmdldExhc3RQ YXRoQ29tcG9uZW50KCkpLmdldFVzZXJPYmplY3QoKTsNCkBAIC04MTcsNyArODE3LDcgQEANCiAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgICAgICB9DQog ICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgDQorDQogICAgICAgICAgICAgICAg IC8vIFRPRE86IFJlYWxseSBzaG91bGQgYmUgRWxlbWVudC9Nb2RlbEVsZW1lbnQsIGJ1dCB3ZSBk b24ndA0KICAgICAgICAgICAgICAgICAvLyBoYXZlIGEgdHlwZSB3aGljaCBpcyBwb3J0YWJsZSBm b3IgdGhpcw0KICAgICAgICAgICAgICAgICBDb2xsZWN0aW9uPE9iamVjdD4gbmV3VGFyZ2V0cyA9 IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOw0KQEAgLTgyOSw5ICs4MjksOSBAQA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKExPRy5pc0RlYnVnRW5hYmxlZCgpKSB7DQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExPRy5kZWJ1ZygobW92ZUFjdGlvbiA/ICJtb3ZlICIgOiAiY29weSAiKSArIG1lKTsN Ci0gICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgDQor ICAgICAgICAgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLChtb3ZlQWN0aW9uID8g Im1vdmUgIiA6ICJjb3B5ICIpICsgbWUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIA0KICAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChNb2RlbC5nZXRDb3JlSGVscGVyKCkuaXNWYWxpZE5h bWVzcGFjZShtZSwgZGVzdCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1v dmVBY3Rpb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGVsLmdldENv cmVIZWxwZXIoKS5zZXROYW1lc3BhY2UobWUsIGRlc3QpOw0KQEAgLTg0MiwxMCArODQyLDEwIEBA DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGFyZ2V0cy5hZGQoTW9k ZWwuZ2V0Q29weUhlbHBlcigpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAuY29weShtZSwgZGVzdCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogVE9ETzogVGhlIGNvcHkgZnVuY3Rpb24gaXMgbm90IHlldCANCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBjb21wbGV0ZWx5IGltcGxlbWVu dGVkIC0gc28gd2Ugd2lsbCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBUT0RPOiBUaGUgY29weSBmdW5jdGlvbiBpcyBub3QgeWV0DQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICogY29tcGxldGVseSBpbXBsZW1lbnRlZCAtIHNvIHdlIHdpbGwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBoYXZlIHNvbWUgZXhjZXB0 aW9ucyBoZXJlIGFuZCB0aGVyZS4qLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExPRy5lcnJvcigiRXhjZXB0aW9uIiwgZSk7DQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsICJFeGNlcHRpb24iLCBlKTsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgIH0NCkBAIC04NjYsNyArODY2LDcgQEANCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAg ICAgICBpZiAoTW9kZWwuZ2V0RmFjYWRlKCkuaXNBRmVhdHVyZShtZSkgDQorICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKE1vZGVsLmdldEZhY2FkZSgpLmlzQUZlYXR1cmUobWUpDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBNb2RlbC5nZXRGYWNhZGUoKS5pc0FDbGFzc2lm aWVyKGRlc3QpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb3ZlQWN0aW9u KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlbC5nZXRDb3JlSGVscGVy KCkucmVtb3ZlRmVhdHVyZSgNCkBAIC04ODQsMTcgKzg4NCwxNyBAQA0KICAgICAgICAgICAgICAg ICAgICAgICAgIC5kcm9wQ29tcGxldGUodHJ1ZSk7DQogICAgICAgICAgICAgICAgICAgICBUYXJn ZXRNYW5hZ2VyLmdldEluc3RhbmNlKCkuc2V0VGFyZ2V0cyhuZXdUYXJnZXRzKTsNCiAgICAgICAg ICAgICAgICAgfSBjYXRjaCAoamF2YS5sYW5nLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpbHMpIHsN Ci0gICAgICAgICAgICAgICAgICAgIExPRy5kZWJ1ZygiZHJvcCBJbGxlZ2FsU3RhdGVFeGNlcHRp b24iKTsNCisgICAgICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgImRyb3AgSWxs ZWdhbFN0YXRlRXhjZXB0aW9uIik7DQogICAgICAgICAgICAgICAgICAgICBkcm9wVGFyZ2V0RHJv cEV2ZW50LnJlamVjdERyb3AoKTsNCiAgICAgICAgICAgICAgICAgfQ0KIA0KICAgICAgICAgICAg ICAgICBkcm9wVGFyZ2V0RHJvcEV2ZW50LmdldERyb3BUYXJnZXRDb250ZXh0KCkNCiAgICAgICAg ICAgICAgICAgICAgIC5kcm9wQ29tcGxldGUodHJ1ZSk7DQogICAgICAgICAgICAgfSBjYXRjaCAo SU9FeGNlcHRpb24gaW8pIHsNCi0gICAgICAgICAgICAgICAgTE9HLmRlYnVnKCJkcm9wIElPRXhj ZXB0aW9uIik7DQorICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuRklORSwgImRyb3AgSU9F eGNlcHRpb24iKTsNCiAgICAgICAgICAgICAgICAgZHJvcFRhcmdldERyb3BFdmVudC5yZWplY3RE cm9wKCk7DQogICAgICAgICAgICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRGbGF2b3JFeGNlcHRpb24g dWZlKSB7DQotICAgICAgICAgICAgICAgIExPRy5kZWJ1ZygiZHJvcCBVbnN1cHBvcnRlZEZsYXZv ckV4Y2VwdGlvbiIpOw0KKyAgICAgICAgICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJkcm9w IFVuc3VwcG9ydGVkRmxhdm9yRXhjZXB0aW9uIik7DQogICAgICAgICAgICAgICAgIGRyb3BUYXJn ZXREcm9wRXZlbnQucmVqZWN0RHJvcCgpOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCkBA IC05NjgsNSArOTY4LDMgQEANCiAgICAgICovDQogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxv bmcgc2VyaWFsVmVyc2lvblVJRCA9IDYyMDcyMzAzOTQ4NjAwMTY2MTdMOw0KIH0NCi0NCi0NCg0K TW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvZXhwbG9y ZXIvRXhwbG9yZXJFdmVudEFkYXB0b3IuamF2YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50aWdyaXMu b3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9h cmdvdW1sL3VpL2V4cGxvcmVyL0V4cGxvcmVyRXZlbnRBZGFwdG9yLmphdmE/dmlldz1kaWZmJnBh dGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvZXhwbG9yZXIvRXhwbG9y ZXJFdmVudEFkYXB0b3IuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBw L3NyYy9vcmcvYXJnb3VtbC91aS9leHBsb3Jlci9FeHBsb3JlckV2ZW50QWRhcHRvci5qYXZhCTIw MTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQogLyogJElkJA0KICAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBDb250cmlidXRvcnMgLSBz ZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiBDb250cmlidXRvcnMgLSBzZWUg YmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2Nv bXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5p ZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCkBAIC00MCwxMCArNDAs MTEgQEANCiANCiBpbXBvcnQgamF2YS5iZWFucy5Qcm9wZXJ0eUNoYW5nZUV2ZW50Ow0KIGltcG9y dCBqYXZhLmJlYW5zLlByb3BlcnR5Q2hhbmdlTGlzdGVuZXI7DQoraW1wb3J0IGphdmEudXRpbC5s b2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQogaW1w b3J0IGphdmF4LnN3aW5nLlN3aW5nVXRpbGl0aWVzOw0KIA0KLWltcG9ydCBvcmcuYXBhY2hlLmxv ZzRqLkxvZ2dlcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwuYXBwbGljYXRpb24uZXZlbnRzLkFyZ29F dmVudFB1bXA7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmFwcGxpY2F0aW9uLmV2ZW50cy5BcmdvRXZl bnRUeXBlczsNCiBpbXBvcnQgb3JnLmFyZ291bWwuYXBwbGljYXRpb24uZXZlbnRzLkFyZ29Qcm9m aWxlRXZlbnQ7DQpAQCAtNjcsNyArNjgsNyBAQA0KICAqIFRPRE86IEluIHNvbWUgY2FzZXMgKHRl c3QgY2FzZXMpIHRoaXMgb2JqZWN0IGlzIGNyZWF0ZWQgd2l0aG91dCBzZXR0aW5nDQogICogdGhl IHRyZWVNb2RlbC4gSSAoTGludXMpIHdpbGwgYWRkIHRlc3RzIGZvciB0aGlzIG5vdy4gSXQgd291 bGQgYmUgYmV0dGVyDQogICogaWYgdGhpcyBpcyBjcmVhdGVkIG9ubHkgd2hlbiB0aGUgRXhwbG9y ZXIgaXMgY3JlYXRlZC4gPHA+DQotICogDQorICoNCiAgKiBUT0RPOiBUaGUgRXhwbG9yZXJUcmVl Tm9kZSBhbHNvIGxpc3RlbnMgdG8gc29tZSBldmVudHMNCiAgKiAoZnJvbSBEaWFncmFtcyksIHNv IGl0IGRvZXMgbm90IGZvbGxvdyB0aGUgcnVsZSBhYm92ZS4NCiAgKg0KQEAgLTc2LDkgKzc3LDkg QEANCiAgKi8NCiBwdWJsaWMgZmluYWwgY2xhc3MgRXhwbG9yZXJFdmVudEFkYXB0b3INCiAgICAg aW1wbGVtZW50cyBQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyIHsNCi0gICAgDQorDQogICAgIHByaXZh dGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQ0KLSAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihF eHBsb3JlckV2ZW50QWRhcHRvci5jbGFzcyk7DQorICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKEV4 cGxvcmVyRXZlbnRBZGFwdG9yLmNsYXNzLmdldE5hbWUoKSk7DQogDQogICAgIC8qKg0KICAgICAg KiBUaGUgc2luZ2xldG9uIGluc3RhbmNlLg0KQEAgLTEyMSw5ICsxMjIsOSBAQA0KICAgICB9DQog DQogICAgIC8qKg0KLSAgICAgKiBUaGUgdHJlZSBzdHJ1Y3R1cmUgaGFzIGNoYW5nZWQgc2lnbmlm aWNhbnRseS4gIA0KKyAgICAgKiBUaGUgdHJlZSBzdHJ1Y3R1cmUgaGFzIGNoYW5nZWQgc2lnbmlm aWNhbnRseS4NCiAgICAgICogSW5mb3JtIHRoZSBhc3NvY2lhdGVkIHRyZWUgbW9kZWwuDQotICAg ICAqIA0KKyAgICAgKg0KICAgICAgKiBUT0RPOiAgVGhpcyBzaG91bGRuJ3QgYmUgcHVibGljLiAg Q29tcG9uZW50cyBkZXNpcmluZyB0bw0KICAgICAgKiBpbmZvcm0gdGhlIEV4cGxvcmVyIG9mIGNo YW5nZXMgc2hvdWxkIHNlbmQgZXZlbnRzLg0KICAgICAgKiBAZGVwcmVjYXRlZCBieSBtdncgaW4g VjAuMjUuNC4gVXNlIGV2ZW50cyBpbnN0ZWFkLg0KQEAgLTEzNiwxMiArMTM3LDEyIEBADQogICAg ICAgICB0cmVlTW9kZWwuc3RydWN0dXJlQ2hhbmdlZCgpOw0KICAgICB9DQogDQotICAgIA0KKw0K ICAgICAvKioNCiAgICAgICogZm9yd2FyZHMgdGhpcyBldmVudCB0byB0aGUgdHJlZSBtb2RlbC4N CiAgICAgICoNCiAgICAgICogQHBhcmFtIGVsZW1lbnQgdGhlIG1vZGVsZWxlbWVudCB0byBiZSBh ZGRlZA0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogVE9ETzogIFRoaXMgc2hvdWxkbid0IGJl IHB1YmxpYy4gIENvbXBvbmVudHMgZGVzaXJpbmcgdG8NCiAgICAgICogaW5mb3JtIHRoZSBFeHBs b3JlciBvZiBjaGFuZ2VzIHNob3VsZCBzZW5kIGV2ZW50cy4NCiAgICAgICovDQpAQCAtMTU2LDcg KzE1Nyw3IEBADQogICAgICAqIGZvcndhcmRzIHRoaXMgZXZlbnQgdG8gdGhlIHRyZWUgbW9kZWwu DQogICAgICAqDQogICAgICAqIEBwYXJhbSBlbGVtZW50IHRoZSBtb2RlbGVsZW1lbnQgdG8gYmUg Y2hhbmdlZA0KLSAgICAgKiANCisgICAgICoNCiAgICAgICogVE9ETzogIFRoaXMgc2hvdWxkbid0 IGJlIHB1YmxpYy4gIENvbXBvbmVudHMgZGVzaXJpbmcgdG8NCiAgICAgICogaW5mb3JtIHRoZSBF eHBsb3JlciBvZiBjaGFuZ2VzIHNob3VsZCBzZW5kIGV2ZW50cy4NCiAgICAgICovDQpAQCAtMTk3 LDE1ICsxOTgsMTIgQEANCiAgICAgICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAg ICAgICAgICAgICAgbW9kZWxDaGFuZ2VkKChVbWxDaGFuZ2VFdmVudCkgcGNlKTsNCiAgICAgICAg ICAgICAgICAgICAgIH0gY2F0Y2ggKEludmFsaWRFbGVtZW50RXhjZXB0aW9uIGUpIHsNCi0gICAg ICAgICAgICAgICAgICAgICAgICBpZiAoTE9HLmlzRGVidWdFbmFibGVkKCkpIHsNCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgTE9HLmRlYnVnKCJ1cGRhdGVMYXlvdXQgbWV0aG9kIGFjY2Vz c2VkICINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJkZWxldGVkIGVs ZW1lbnQiLCBlKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAg ICAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAidXBkYXRlTGF5b3V0IG1ldGhvZCBhY2Nlc3Nl ZCBkZWxldGVkIGVsZW1lbnQiLCBlKTsNCiAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAg ICAgICAgICAgfSAgDQorICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICB9Ow0KICAgICAg ICAgICAgIFN3aW5nVXRpbGl0aWVzLmludm9rZUxhdGVyKGRvV29ya1J1bm5hYmxlKTsNCi0gICAg ICAgICAgICANCisNCiAgICAgICAgIH0gZWxzZSBpZiAocGNlLmdldFByb3BlcnR5TmFtZSgpLmVx dWFscygNCiAgICAgICAgICAgICAgICAgLy8gVE9ETzogTm8gb25lIHNob3VsZCBiZSBzZW5kaW5n IHRoZSBkZXByZWNhdGVkIGV2ZW50DQogICAgICAgICAgICAgICAgIC8vIGZyb20gb3V0c2lkZSBB cmdvVU1MLCBidXQga2VlcCByZXNwb25kaW5nIHRvIGl0IGZvciBub3cNCkBAIC0yMjksNyArMjI3 LDcgQEANCiAgICAgICAgICAgICB9DQogICAgICAgICB9DQogICAgIH0NCi0gICAgDQorDQogICAg IHByaXZhdGUgdm9pZCBtb2RlbENoYW5nZWQoVW1sQ2hhbmdlRXZlbnQgZXZlbnQpIHsNCiAgICAg ICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEF0dHJpYnV0ZUNoYW5nZUV2ZW50KSB7DQogICAgICAg ICAgICAgLy8gVE9ETzogQ2FuIHRoaXMgYmUgbWFkZSBtb3JlIHJlc3RyaWN0aXZlPw0KQEAgLTI1 NCwxMSArMjUyLDExIEBADQogICAgICAgICAgICAgICAgICAgICAuZ2V0U291cmNlKCkpOw0KICAg ICAgICAgfQ0KICAgICB9DQotICAgIA0KLSAgICANCisNCisNCiAgICAgLyoqDQogICAgICAqIExp c3RlbmVyIGZvciBhZGRpdGlvbnMgYW5kIHJlbW92YWxzIG9mIHByb2ZpbGVzLg0KLSAgICAgKiBT aW5jZSB0aGV5IGdlbmVyYWxseSBoYXZlIGEgbWFqb3IgaW1wYWN0IG9uIHRoZSBleHBsb3JlciB0 cmVlLCANCisgICAgICogU2luY2UgdGhleSBnZW5lcmFsbHkgaGF2ZSBhIG1ham9yIGltcGFjdCBv biB0aGUgZXhwbG9yZXIgdHJlZSwNCiAgICAgICogd2Ugc2ltcGx5IHVwZGF0ZSB0aGVtIGNvbXBs ZXRlbHkuDQogICAgICAqDQogICAgICAqIEBhdXRob3IgTWljaGllbA0KQEAgLTI3Miw2ICsyNzAs NiBAQA0KICAgICAgICAgcHVibGljIHZvaWQgcHJvZmlsZVJlbW92ZWQoQXJnb1Byb2ZpbGVFdmVu dCBlKSB7DQogICAgICAgICAgICAgc3RydWN0dXJlQ2hhbmdlZCgpOw0KICAgICAgICAgfQ0KLSAg ICAgICAgDQorDQogICAgIH0NCiB9DQoNCk1vZGlmaWVkOiB0cnVuay9zcmMvYXJnb3VtbC1hcHAv c3JjL29yZy9hcmdvdW1sL3VpL2V4cGxvcmVyL0V4cGxvcmVyUGVyc3BlY3RpdmUuamF2YQ0KVXJs OiBodHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9z cmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL2V4cGxvcmVyL0V4cGxvcmVyUGVyc3Bl Y3RpdmUuamF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJn b3VtbC91aS9leHBsb3Jlci9FeHBsb3JlclBlcnNwZWN0aXZlLmphdmEJKG9yaWdpbmFsKQ0KKysr IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvZXhwbG9yZXIvRXhwbG9y ZXJQZXJzcGVjdGl2ZS5qYXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2 IEBADQogLyogJElkJA0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykg MjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAx MiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlz IHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZh aWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4w DQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFi bGUgYXQNCkBAIC0zOCwxMSArMzgsMTEgQEANCiANCiBwYWNrYWdlIG9yZy5hcmdvdW1sLnVpLmV4 cGxvcmVyOw0KIA0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCiBpbXBvcnQgamF2YS51dGlsLkFy cmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQogDQotaW1wb3J0IG9yZy5hcmdvdW1s LnVpLmV4cGxvcmVyLnJ1bGVzLlBlcnNwZWN0aXZlUnVsZTsNCiBpbXBvcnQgb3JnLmFyZ291bWwu aTE4bi5UcmFuc2xhdG9yOw0KK2ltcG9ydCBvcmcuYXJnb3VtbC51aS5leHBsb3Jlci5ydWxlcy5Q ZXJzcGVjdGl2ZVJ1bGU7DQogDQogLyoqDQogICogUmVwcmVzZW50cyBhIHBlcnNwZWN0aXZlIChv ciB2aWV3KSBvZiB0aGUgdW1sIG1vZGVsIGZvciBkaXNwbGF5IGluIHRoZQ0KDQpNb2RpZmllZDog dHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9leHBsb3Jlci9FeHBsb3Jl clBvcHVwLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3Nl L2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9leHBsb3Jl ci9FeHBsb3JlclBvcHVwLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9MTk5MDYmcjI9 MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdvdW1sLWFwcC9z cmMvb3JnL2FyZ291bWwvdWkvZXhwbG9yZXIvRXhwbG9yZXJQb3B1cC5qYXZhCShvcmlnaW5hbCkN CisrKyB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL2V4cGxvcmVyL0V4 cGxvcmVyUG9wdXAuamF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBA QA0KIC8qICRJZCQNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIw MDktMjAxMCBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkt MjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBU aGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUg YXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2 MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFp bGFibGUgYXQNCkBAIC00OCw2ICs0OCw4IEBADQogaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KIGlt cG9ydCBqYXZhLnV0aWwuU2V0Ow0KIGltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsNCitpbXBvcnQg amF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dl cjsNCiANCiBpbXBvcnQgamF2YXguc3dpbmcuQWJzdHJhY3RBY3Rpb247DQogaW1wb3J0IGphdmF4 LnN3aW5nLkFjdGlvbjsNCkBAIC01Niw3ICs1OCw2IEBADQogaW1wb3J0IGphdmF4LnN3aW5nLkpQ b3B1cE1lbnU7DQogaW1wb3J0IGphdmF4LnN3aW5nLk1lbnVFbGVtZW50Ow0KIA0KLWltcG9ydCBv cmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwuaTE4bi5UcmFuc2xh dG9yOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5rZXJuZWwuQWN0aW9uTGlzdDsNCiBpbXBvcnQgb3Jn LmFyZ291bWwua2VybmVsLlByb2ZpbGVDb25maWd1cmF0aW9uOw0KQEAgLTEwNCwxMSArMTA1LDEx IEBADQogICovDQogcHVibGljIGNsYXNzIEV4cGxvcmVyUG9wdXAgZXh0ZW5kcyBKUG9wdXBNZW51 IHsNCiANCi0gICAgcHJpdmF0ZSBKTWVudSBjcmVhdGVEaWFncmFtcyA9IA0KKyAgICBwcml2YXRl IEpNZW51IGNyZWF0ZURpYWdyYW1zID0NCiAgICAgICAgIG5ldyBKTWVudShtZW51TG9jYWxpemUo Im1lbnUucG9wdXAuY3JlYXRlLWRpYWdyYW0iKSk7DQotICAgIA0KKw0KICAgICBwcml2YXRlIHN0 YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0NCi0gICAgICAgIExvZ2dlci5nZXRMb2dnZXIoRXhwbG9y ZXJQb3B1cC5jbGFzcyk7DQorICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKEV4cGxvcmVyUG9wdXAu Y2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgLyoqDQogICAgICAqIENyZWF0ZXMgYSBuZXcgaW5z dGFuY2Ugb2YgRXhwbG9yZXJQb3B1cC4NCkBAIC0xMjAsNyArMTIxLDcgQEANCiAgICAgICovDQog ICAgIHB1YmxpYyBFeHBsb3JlclBvcHVwKE9iamVjdCBzZWxlY3RlZEl0ZW0sIE1vdXNlRXZlbnQg bWUpIHsNCiAgICAgICAgIHN1cGVyKCJFeHBsb3JlciBwb3B1cCBtZW51Iik7DQotICAgICAgICAN CisNCiAgICAgICAgIC8qIENoZWNrIGlmIG11bHRpcGxlIGl0ZW1zIGFyZSBzZWxlY3RlZC4gKi8N CiAgICAgICAgIGJvb2xlYW4gbXVsdGlTZWxlY3QgPQ0KICAgICAgICAgICAgICAgICBUYXJnZXRN YW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0VGFyZ2V0cygpLnNpemUoKSA+IDE7DQpAQCAtMTgzLDE0 ICsxODQsMTQgQEANCiAgICAgICAgICAgICBpbml0TWVudUNyZWF0ZURpYWdyYW1zKCk7DQogICAg ICAgICAgICAgdGhpcy5hZGQoY3JlYXRlRGlhZ3JhbXMpOw0KICAgICAgICAgfQ0KLSAgICAgICAg DQorDQogICAgICAgICBpbml0TWVudUNyZWF0ZU1vZHVsZUFjdGlvbnMoKTsNCiANCiAgICAgICAg IGlmIChtdXRhYmxlTW9kZWxFbGVtZW50c09ubHkpIHsNCiAgICAgICAgICAgICBpbml0TWVudUNy ZWF0ZU1vZGVsRWxlbWVudHMoKTsNCiAgICAgICAgIH0NCi0gICAgICAgIA0KLSAgICAgICAgZmlu YWwgYm9vbGVhbiBtb2RlbEVsZW1lbnRTZWxlY3RlZCA9IA0KKw0KKyAgICAgICAgZmluYWwgYm9v bGVhbiBtb2RlbEVsZW1lbnRTZWxlY3RlZCA9DQogICAgICAgICAgICAgTW9kZWwuZ2V0RmFjYWRl KCkuaXNBVU1MRWxlbWVudChzZWxlY3RlZEl0ZW0pOw0KIA0KICAgICAgICAgaWYgKG1vZGVsRWxl bWVudFNlbGVjdGVkKSB7DQpAQCAtMjM1LDExICsyMzYsMTEgQEANCiAgICAgICAgICAgICAgICAg ICAgID8gKChVTUxBY3Rpdml0eURpYWdyYW0pIGFjdGl2ZURpYWdyYW0pLmdldFN0YXRlTWFjaGlu ZSgpDQogICAgICAgICAgICAgICAgICAgICA6IG51bGw7DQogDQotICAgICAgICAgICAgQ29sbGVj dGlvbiBwcm9qZWN0TW9kZWxzID0gDQorICAgICAgICAgICAgQ29sbGVjdGlvbiBwcm9qZWN0TW9k ZWxzID0NCiAgICAgICAgICAgICAgICAgUHJvamVjdE1hbmFnZXIuZ2V0TWFuYWdlcigpLmdldEN1 cnJlbnRQcm9qZWN0KCkuZ2V0TW9kZWxzKCk7DQogICAgICAgICAgICAgaWYgKCFtdWx0aVNlbGVj dCkgew0KICAgICAgICAgICAgICAgICBpZiAoKGNsYXNzaWZpZXJTZWxlY3RlZCAmJiAhcmVsYXRp b25zaGlwU2VsZWN0ZWQpDQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHBhY2thZ2VTZWxl Y3RlZCANCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAocGFja2FnZVNlbGVjdGVkDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBBbGxvdyBhZGRpbmcgbW9kZWxz IHRvIGEgZGlhZ3JhbSAtIGlzc3VlIDQxNzIuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmJiAhcHJvamVjdE1vZGVscy5jb250YWlucyhzZWxlY3RlZEl0ZW0pKQ0KICAgICAgICAg ICAgICAgICAgICAgICAgIHx8IChzdGF0ZVZlcnRleFNlbGVjdGVkDQpAQCAtMjgxLDkgKzI4Miw5 IEBADQogICAgICAgICAgICAgfQ0KIA0KIA0KLSAgICAgICAgICAgIGlmIChtdXRhYmxlTW9kZWxF bGVtZW50c09ubHkgDQorICAgICAgICAgICAgaWYgKG11dGFibGVNb2RlbEVsZW1lbnRzT25seQ0K ICAgICAgICAgICAgICAgICAgICAgLy8gQ2FuJ3QgZGVsZXRlIGxhc3QgdG9wIGxldmVsIG1vZGVs DQotICAgICAgICAgICAgICAgICAgICAmJiAhKHByb2plY3RNb2RlbHMuc2l6ZSgpID09IDEgDQor ICAgICAgICAgICAgICAgICAgICAmJiAhKHByb2plY3RNb2RlbHMuc2l6ZSgpID09IDENCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJvamVjdE1vZGVscy5jb250YWlucyhzZWxlY3Rl ZEl0ZW0pKSkgew0KICAgICAgICAgICAgICAgICAvLyBUT0RPOiBTaG91bGRuJ3QgYmUgY3JlYXRp bmcgYSBuZXcgaW5zdGFuY2UgaGVyZS4gV2Ugc2hvdWxkDQogICAgICAgICAgICAgICAgIC8vIGhv bGQgdGhlIGRlbGV0ZSBhY3Rpb24gaW4gc29tZSBjZW50cmFsIHBsYWNlLg0KQEAgLTMzNSw4ICsz MzYsOCBAQA0KICAgICAgICAgICAgICAgICBhZC5zZXRFbmFibGVkKGFkLnNob3VsZEJlRW5hYmxl ZCgpKTsNCiAgICAgICAgICAgICAgICAgdGhpcy5hZGQoYWQpOw0KICAgICAgICAgICAgIH0NCi0g ICAgICAgICAgICANCi0gICAgICAgICAgICANCisNCisNCiAgICAgICAgIH0gZWxzZSBpZiAoc2Vs ZWN0ZWRJdGVtIGluc3RhbmNlb2YgRGlhZ3JhbSkgew0KICAgICAgICAgICAgIHRoaXMuYWRkKG5l dyBBY3Rpb25TYXZlRGlhZ3JhbVRvQ2xpcGJvYXJkKCkpOw0KICAgICAgICAgICAgIC8vIFRPRE86 IERlbGV0ZSBzaG91bGQgYmUgYXZhaWxhYmxlIG9uIGFueSBjb21iaW5hdGlvbiBvZiBtb2RlbA0K QEAgLTM5Myw3ICszOTQsNyBAQA0KICAgICAgICAgICAgIGlmIChjbGFzc2lmaWVyUm9sZXNPbmx5 KSB7DQogICAgICAgICAgICAgICAgIG1lbnVJdGVtcy5hZGQobmV3IE9yZGVyZWRNZW51SXRlbSgN CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQWN0aW9uQ3JlYXRlQXNzb2NpYXRpb25Sb2xl KA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZWwuZ2V0TWV0YVR5cGVzKCku Z2V0QXNzb2NpYXRpb25Sb2xlKCksIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TW9kZWwuZ2V0TWV0YVR5cGVzKCkuZ2V0QXNzb2NpYXRpb25Sb2xlKCksDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0YXJnZXRzKSkpOw0KICAgICAgICAgICAgIH0gZWxzZSBpZiAo IWNsYXNzaWZpZXJSb2xlRm91bmQpIHsNCiAgICAgICAgICAgICAgICAgYm9vbGVhbiBjbGFzc2lm aWVyc09ubHkgPSB0cnVlOw0KQEAgLTQwNiw3ICs0MDcsNyBAQA0KICAgICAgICAgICAgICAgICBp ZiAoY2xhc3NpZmllcnNPbmx5KSB7DQogICAgICAgICAgICAgICAgICAgICBtZW51SXRlbXMuYWRk KG5ldyBPcmRlcmVkTWVudUl0ZW0oDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBB Y3Rpb25DcmVhdGVBc3NvY2lhdGlvbigNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBNb2RlbC5nZXRNZXRhVHlwZXMoKS5nZXRBc3NvY2lhdGlvbigpLCANCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlbC5nZXRNZXRhVHlwZXMoKS5nZXRBc3NvY2lh dGlvbigpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHMpKSk7 DQogICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICB9DQpAQCAtNDE2LDcgKzQxNyw3IEBA DQogICAgICAgICAgICAgICAgICAgICBtZW51SXRlbXMsDQogICAgICAgICAgICAgICAgICAgICBN b2RlbC5nZXRNZXRhVHlwZXMoKS5nZXREZXBlbmRlbmN5KCksDQogICAgICAgICAgICAgICAgICAg ICAiICIgKyBtZW51TG9jYWxpemUoIm1lbnUucG9wdXAuZGVwZW5kcy1vbiIpICsgIiAiKTsNCi0g ICAgICAgICAgICANCisNCiAgICAgICAgICAgICBhZGRDcmVhdGVNb2RlbEVsZW1lbnRBY3Rpb24o DQogICAgICAgICAgICAgICAgICAgICBtZW51SXRlbXMsDQogICAgICAgICAgICAgICAgICAgICBN b2RlbC5nZXRNZXRhVHlwZXMoKS5nZXRHZW5lcmFsaXphdGlvbigpLA0KQEAgLTQ0MiwyMyArNDQz LDIzIEBADQogICAgICAgICAgICAgICAgICAgICBNb2RlbC5nZXRNZXRhVHlwZXMoKS5nZXRBYnN0 cmFjdGlvbigpLA0KICAgICAgICAgICAgICAgICAgICAgIiAiICsgbWVudUxvY2FsaXplKCJtZW51 LnBvcHVwLnJlYWxpemVzIikgKyAiICIpOw0KICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRzLnNp emUoKSA9PSAxKSB7DQotICAgICAgICAgICAgDQorDQogICAgICAgICAgICAgT2JqZWN0IHRhcmdl dCA9IHRhcmdldHMuZ2V0KDApOw0KIA0KLSAgICAgICAgICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBh bGwgcG9zc2libGUgbW9kZWwgZWxlbWVudHMgdG8gZGV0ZXJtaW5lIHdoaWNoICANCisgICAgICAg ICAgICAvLyBpdGVyYXRlIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1vZGVsIGVsZW1lbnRzIHRvIGRl dGVybWluZSB3aGljaA0KICAgICAgICAgICAgIC8vIGFyZSB2YWxpZCB0byBiZSBjb250YWluZWQg YnkgdGhlIHNlbGVjdGVkIHRhcmdldA0KICAgICAgICAgICAgIGZvciAoT2JqZWN0IG1ldGFUeXBl IDogTW9kZWwuZ2V0TWV0YVR5cGVzKCkuZ2V0QWxsTWV0YVR5cGVzKCkpIHsNCiAgICAgICAgICAg ICAgICAgLy8gdGVzdCBpZiB0aGlzIGVsZW1lbnQgY2FuIGJlIGNvbnRhaW5lZCBieSB0aGUgdGFy Z2V0DQogICAgICAgICAgICAgICAgIGlmIChNb2RlbC5nZXRVbWxGYWN0b3J5KCkuaXNDb250YWlu bWVudFZhbGlkKG1ldGFUeXBlLCB0YXJnZXQpKSB7DQotICAgICAgICAgICAgICAgICAgICAvLyB0 aGlzIGVsZW1lbnQgY2FuIGJlIGNvbnRhaW5lZCBhZGQgYSBtZW51IGl0ZW0gDQorICAgICAgICAg ICAgICAgICAgICAvLyB0aGlzIGVsZW1lbnQgY2FuIGJlIGNvbnRhaW5lZCBhZGQgYSBtZW51IGl0 ZW0NCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIHRha2Ug dGhhdCBhY3Rpb24NCiAgICAgICAgICAgICAgICAgICAgIG1lbnVJdGVtcy5hZGQobmV3IE9yZGVy ZWRNZW51SXRlbSgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFjdGlvbkNyZWF0 ZUNvbnRhaW5lZE1vZGVsRWxlbWVudCgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtZXRhVHlwZSwgdGFyZ2V0KSkpOw0KICAgICAgICAgICAgICAgICB9DQotICAgICAgICAg ICAgfSAgICANCisgICAgICAgICAgICB9DQogICAgICAgICB9DQotICAgICAgICANCisNCiAgICAg ICAgIGlmIChtZW51SXRlbXMuc2l6ZSgpID09IDEpIHsNCiAgICAgICAgICAgICBhZGQobWVudUl0 ZW1zLml0ZXJhdG9yKCkubmV4dCgpKTsNCiAgICAgICAgIH0gZWxzZSBpZiAobWVudUl0ZW1zLnNp emUoKSA+IDEpIHsNCkBAIC00NzAsMTEgKzQ3MSwxMyBAQA0KICAgICAgICAgICAgIH0NCiAgICAg ICAgIH0NCiAgICAgfQ0KLSAgICANCisNCiAgICAgcHJpdmF0ZSB2b2lkIGluaXRNZW51Q3JlYXRl TW9kdWxlQWN0aW9ucygpIHsNCi0gICAgICAgIGZpbmFsIExpc3Q8QWN0aW9uPiBjb250ZXh0QWN0 aW9ucyA9IA0KKyAgICAgICAgZmluYWwgTGlzdDxBY3Rpb24+IGNvbnRleHRBY3Rpb25zID0NCiAg ICAgICAgICAgICBDb250ZXh0QWN0aW9uRmFjdG9yeU1hbmFnZXIuZ2V0Q29udGV4dFBvcHVwQWN0 aW9ucygpOw0KLSAgICAgICAgTE9HLmluZm8oY29udGV4dEFjdGlvbnMpOw0KKyAgICAgICAgDQor ICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJ7MH0iLCBjb250ZXh0QWN0aW9ucyk7DQorICAg ICAgICANCiAgICAgICAgIGlmIChjb250ZXh0QWN0aW9ucyBpbnN0YW5jZW9mIEFjdGlvbkxpc3Qp IHsNCiAgICAgICAgICAgICByZWN1cnNpdmVBZGQodGhpcywgKEFjdGlvbikgY29udGV4dEFjdGlv bnMpOw0KICAgICAgICAgfSBlbHNlIHsNCkBAIC00ODMsNyArNDg2LDcgQEANCiAgICAgICAgICAg ICB9DQogICAgICAgICB9DQogICAgIH0NCi0gICAgDQorDQogICAgIHByaXZhdGUgdm9pZCByZWN1 cnNpdmVBZGQoTWVudUVsZW1lbnQgbWVudSwgQWN0aW9uIGEpIHsNCiAgICAgICAgIGlmIChhIGlu c3RhbmNlb2YgTGlzdDw/Pikgew0KICAgICAgICAgICAgIEpNZW51IG0gPSBuZXcgSk1lbnUoYSk7 DQpAQCAtNTAzLDcgKzUwNiw3IEBADQogICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KICAgICB9 DQotICAgIA0KKw0KICAgICBwcml2YXRlIHZvaWQgYWRkQ3JlYXRlTW9kZWxFbGVtZW50QWN0aW9u KA0KICAgICAgICAgICAgICAgICBTZXQ8Sk1lbnVJdGVtPiBtZW51SXRlbXMsDQogICAgICAgICAg ICAgICAgIE9iamVjdCBtZXRhVHlwZSwNCkBAIC01MjIsNyArNTI1LDcgQEANCiAgICAgICAgICAg ICBtZW51SXRlbXMuYWRkKHN1Yk1lbnUpOw0KICAgICAgICAgfQ0KICAgICB9DQotICAgIA0KKw0K ICAgICAvKioNCiAgICAgICogQXR0ZW1wdCB0byBidWlsZCBhIG1lbnUgaXRlbSB0byBjcmVhdGUg dGhlIGdpdmVuIG1vZGVsIGVsZW1lbnQgdHlwZQ0KICAgICAgKiBhcyBhIHJlbGF0aW9uIGJldHdl biB0d28gZXhpc3RpbmcgbW9kZWwgZWxlbWVudHMuDQpAQCAtNTM1LDE4ICs1MzgsMTggQEANCiAg ICAgICogQHBhcmFtIG1lbnUgVGhlIG1lbnUgdG8gd2hpY2ggdGhlIG1lbnUgaXRlbSBzaG91bGQg YmUgYWRkZWQNCiAgICAgICovDQogICAgIHByaXZhdGUgdm9pZCBidWlsZERpcmVjdGlvbmFsQ3Jl YXRlTWVudUl0ZW0oDQotICAgICAgICAgICAgT2JqZWN0IG1ldGFUeXBlLCANCi0gICAgICAgICAg ICBPYmplY3Qgc291cmNlLCANCi0gICAgICAgICAgICBPYmplY3QgZGVzdCwgDQorICAgICAgICAg ICAgT2JqZWN0IG1ldGFUeXBlLA0KKyAgICAgICAgICAgIE9iamVjdCBzb3VyY2UsDQorICAgICAg ICAgICAgT2JqZWN0IGRlc3QsDQogICAgICAgICAgICAgU3RyaW5nIHJlbGF0aW9uc2hpcERlc2Ny LA0KICAgICAgICAgICAgIEpNZW51IG1lbnUpIHsNCiAgICAgICAgIGlmIChNb2RlbC5nZXRVbWxG YWN0b3J5KCkuaXNDb25uZWN0aW9uVmFsaWQoDQogICAgICAgICAgICAgICAgICAgICBtZXRhVHlw ZSwgc291cmNlLCBkZXN0LCB0cnVlKSkgew0KICAgICAgICAgICAgIEpNZW51SXRlbSBtZW51SXRl bSA9IG5ldyBKTWVudUl0ZW0oDQogICAgICAgICAgICAgICAgICAgICBuZXcgQWN0aW9uQ3JlYXRl RWRnZU1vZGVsRWxlbWVudCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YVR5cGUs IA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsIA0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkZXN0LCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YVR5 cGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGVzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRp b25zaGlwRGVzY3IpKTsNCiAgICAgICAgICAgICBpZiAobWVudUl0ZW0gIT0gbnVsbCkgew0KICAg ICAgICAgICAgICAgICBtZW51LmFkZChtZW51SXRlbSk7DQpAQCAtNTY1LDcgKzU2OCw3IEBADQog ICAgIHByaXZhdGUgU3RyaW5nIG1lbnVMb2NhbGl6ZShTdHJpbmcga2V5KSB7DQogICAgICAgICBy ZXR1cm4gVHJhbnNsYXRvci5sb2NhbGl6ZShrZXkpOw0KICAgICB9DQotICAgIA0KKw0KICAgICAv KioNCiAgICAgICogQWRkIHBvcHVwIG1lbnUgaXRlbXMgZm9yIGFkZGluZyB0byBkaWFncmFtIGJv dGggZWRnZSBlbmRzLg0KICAgICAgKg0KQEAgLTYxOSw3ICs2MjIsNyBAQA0KICAgICAgKi8NCiAg ICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTU2NjM4ODQ4 NzE1OTk5MzE3ODBMOw0KIA0KLSAgICANCisNCiAgICAgcHJpdmF0ZSBjbGFzcyBBY3Rpb25BZGRF eGlzdGluZ1JlbGF0ZWROb2RlIGV4dGVuZHMgVW5kb2FibGVBY3Rpb24gew0KIA0KICAgICAgICAg LyoqDQpAQCAtNjQ5LDcgKzY1Miw3IEBADQogICAgICAgICAgICAgTXV0YWJsZUdyYXBoTW9kZWwg Z20gPSAoTXV0YWJsZUdyYXBoTW9kZWwpIGRpYS5nZXRHcmFwaE1vZGVsKCk7DQogICAgICAgICAg ICAgcmV0dXJuIGdtLmNhbkFkZE5vZGUob2JqZWN0KTsNCiAgICAgICAgIH0NCi0gICAgICAgIA0K Kw0KICAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGFlKSB7 DQogICAgICAgICAgICAgc3VwZXIuYWN0aW9uUGVyZm9ybWVkKGFlKTsNCiAgICAgICAgICAgICBF ZGl0b3IgY2UgPSBHbG9iYWxzLmN1ckVkaXRvcigpOw0KQEAgLTY2OCw3ICs2NzEsNyBAQA0KICAg ICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICBHbG9iYWxzLnNob3dT dGF0dXMoaW5zdHJ1Y3Rpb25zKTsNCiAgICAgICAgICAgICB9DQotICAgICAgICAgICAgDQorDQog ICAgICAgICAgICAgQXJyYXlMaXN0PE9iamVjdD4gZWxlbWVudHNUb0FkZCA9IG5ldyBBcnJheUxp c3Q8T2JqZWN0PigxKTsNCiAgICAgICAgICAgICBlbGVtZW50c1RvQWRkLmFkZChvYmplY3QpOw0K ICAgICAgICAgICAgIGZpbmFsIE1vZGVBZGRUb0RpYWdyYW0gcGxhY2VNb2RlID0NCkBAIC02Nzcs MTQgKzY4MCwxNCBAQA0KICAgICAgICAgICAgIEdsb2JhbHMubW9kZShwbGFjZU1vZGUsIGZhbHNl KTsNCiAgICAgICAgIH0NCiAgICAgfSAvKiBlbmQgY2xhc3MgQWN0aW9uQWRkRXhpc3RpbmdSZWxh dGVkTm9kZSAqLw0KLSAgICANCisNCiAgICAgLyoqDQogICAgICAqIEEgSk1lbnVJdGVtIHRoYXQg d2lsbCBvcmRlciBieSBkaXNwbGF5IG5hbWUNCiAgICAgICoNCiAgICAgICogQGF1dGhvciBCb2Ig VGFybGluZw0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSBjbGFzcyBPcmRlcmVkTWVudUl0ZW0gZXh0 ZW5kcyBKTWVudUl0ZW0gaW1wbGVtZW50cyBDb21wYXJhYmxlIHsNCi0gICAgICAgIA0KKw0KICAg ICAgICAgLyoqDQogICAgICAgICAgKiBJbnN0YW50aWF0ZSBPcmRlcmVkTWVudUl0ZW0NCiAgICAg ICAgICAqIEBwYXJhbSBhY3Rpb24NCkBAIC03MDcsMTQgKzcxMCwxNCBAQA0KICAgICAgICAgICAg IHJldHVybiB0b1N0cmluZygpLmNvbXBhcmVUbyhvdGhlci50b1N0cmluZygpKTsNCiAgICAgICAg IH0NCiAgICAgfQ0KLSAgICAgICAgDQorDQogICAgIC8qKg0KICAgICAgKiBBIEpNZW51SXRlbSB0 aGF0IHdpbGwgb3JkZXIgYnkgZGlzcGxheSBuYW1lDQogICAgICAqDQogICAgICAqIEBhdXRob3Ig Qm9iIFRhcmxpbmcNCiAgICAgICovDQogICAgIHByaXZhdGUgY2xhc3MgT3JkZXJlZE1lbnUgZXh0 ZW5kcyBKTWVudSBpbXBsZW1lbnRzIENvbXBhcmFibGUgew0KLSAgICAgICAgDQorDQogICAgICAg ICAvKioNCiAgICAgICAgICAqIEluc3RhbnRpYXRlIE9yZGVyZWRNZW51DQogICAgICAgICAgKiBA cGFyYW0gbmFtZQ0KQEAgLTcyOCwxOSArNzMxLDE5IEBADQogICAgICAgICAgICAgcmV0dXJuIHRv U3RyaW5nKCkuY29tcGFyZVRvKG90aGVyLnRvU3RyaW5nKCkpOw0KICAgICAgICAgfQ0KICAgICB9 DQotICAgICAgICANCisNCiAgICAgLyoqDQogICAgICAqIEFuIGFjdGlvbiB0byBjcmVhdGUgYW4g YXNzb2NpYXRpb24gYmV0d2VlbiAyIG9yIG1vcmUgbW9kZWwgZWxlbWVudHMuDQogICAgICAqDQog ICAgICAqIEBhdXRob3IgQm9iIFRhcmxpbmcNCiAgICAgICovDQogICAgIHByaXZhdGUgY2xhc3Mg QWN0aW9uQ3JlYXRlQXNzb2NpYXRpb24gZXh0ZW5kcyBBYnN0cmFjdEFjdGlvbiB7DQotICAgICAg ICANCi0gICAgICAgIHByaXZhdGUgT2JqZWN0IG1ldGFUeXBlOyANCisNCisgICAgICAgIHByaXZh dGUgT2JqZWN0IG1ldGFUeXBlOw0KICAgICAgICAgcHJpdmF0ZSBMaXN0IGNsYXNzaWZpZXJzOw0K IA0KICAgICAgICAgcHVibGljIEFjdGlvbkNyZWF0ZUFzc29jaWF0aW9uKA0KLSAgICAgICAgICAg ICAgICBPYmplY3QgdGhlTWV0YVR5cGUsIA0KKyAgICAgICAgICAgICAgICBPYmplY3QgdGhlTWV0 YVR5cGUsDQogICAgICAgICAgICAgICAgIExpc3QgY2xhc3NpZmllcnNMaXN0KSB7DQogICAgICAg ICAgICAgc3VwZXIobWVudUxvY2FsaXplKCJtZW51LnBvcHVwLmNyZWF0ZSIpICsgIiAiDQogICAg ICAgICAgICAgICAgICAgICArIE1vZGVsLmdldE1ldGFUeXBlcygpLmdldE5hbWUodGhlTWV0YVR5 cGUpKTsNCkBAIC03NjksMTIgKzc3MiwxMiBAQA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBudWxsKTsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVn YWxNb2RlbEVsZW1lbnRDb25uZWN0aW9uRXhjZXB0aW9uIGUxKSB7DQotICAgICAgICAgICAgICAg IExPRy5lcnJvcigiRXhjZXB0aW9uIiwgZTEpOw0KKyAgICAgICAgICAgICAgICBMT0cubG9nKExl dmVsLlNFVkVSRSwgIkV4Y2VwdGlvbiIsIGUxKTsNCiAgICAgICAgICAgICB9DQogICAgICAgICB9 DQogICAgIH0NCi0gICAgDQotICAgIA0KKw0KKw0KICAgICAvKioNCiAgICAgICogQW4gYWN0aW9u IHRvIGNyZWF0ZSBhbiBhc3NvY2lhdGlvbiBiZXR3ZWVuIDIgb3IgbW9yZSBtb2RlbCBlbGVtZW50 cy4NCiAgICAgICoNCkBAIC03ODIsMTEgKzc4NSwxMSBAQA0KICAgICAgKi8NCiAgICAgcHJpdmF0 ZSBjbGFzcyBBY3Rpb25DcmVhdGVBc3NvY2lhdGlvblJvbGUgZXh0ZW5kcyBBYnN0cmFjdEFjdGlv biB7DQogDQotICAgICAgICBwcml2YXRlIE9iamVjdCBtZXRhVHlwZTsgDQorICAgICAgICBwcml2 YXRlIE9iamVjdCBtZXRhVHlwZTsNCiAgICAgICAgIHByaXZhdGUgTGlzdCBjbGFzc2lmaWVyUm9s ZXM7DQogDQogICAgICAgICBwdWJsaWMgQWN0aW9uQ3JlYXRlQXNzb2NpYXRpb25Sb2xlKA0KLSAg ICAgICAgICAgICAgICBPYmplY3QgdGhlTWV0YVR5cGUsIA0KKyAgICAgICAgICAgICAgICBPYmpl Y3QgdGhlTWV0YVR5cGUsDQogICAgICAgICAgICAgICAgIExpc3QgY2xhc3NpZmllclJvbGVzTGlz dCkgew0KICAgICAgICAgICAgIHN1cGVyKG1lbnVMb2NhbGl6ZSgibWVudS5wb3B1cC5jcmVhdGUi KSArICIgIg0KICAgICAgICAgICAgICAgICAgICAgKyBNb2RlbC5nZXRNZXRhVHlwZXMoKS5nZXRO YW1lKHRoZU1ldGFUeXBlKSk7DQpAQCAtODE1LDcgKzgxOCw3IEBADQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG51bGwpOw0KICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfSBj YXRjaCAoSWxsZWdhbE1vZGVsRWxlbWVudENvbm5lY3Rpb25FeGNlcHRpb24gZTEpIHsNCi0gICAg ICAgICAgICAgICAgTE9HLmVycm9yKCJFeGNlcHRpb24iLCBlMSk7DQorICAgICAgICAgICAgICAg IExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiRXhjZXB0aW9uIiwgZTEpOw0KICAgICAgICAgICAgIH0N CiAgICAgICAgIH0NCiAgICAgfQ0KDQpNb2RpZmllZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3Ny Yy9vcmcvYXJnb3VtbC91aS9leHBsb3Jlci9FeHBsb3JlclRyZWVNb2RlbC5qYXZhDQpVcmw6IGh0 dHA6Ly9hcmdvdW1sLnRpZ3Jpcy5vcmcvc291cmNlL2Jyb3dzZS9hcmdvdW1sL3RydW5rL3NyYy9h cmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvZXhwbG9yZXIvRXhwbG9yZXJUcmVlTW9kZWwu amF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91 aS9leHBsb3Jlci9FeHBsb3JlclRyZWVNb2RlbC5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9z cmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL2V4cGxvcmVyL0V4cGxvcmVyVHJlZU1v ZGVsLmphdmEJMjAxMi0xMi0zMCAwNTowNjowMS0wODAwDQpAQCAtMSw2ICsxLDYgQEANCiAvKiAk SWQkDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA5IENvbnRy aWJ1dG9ycyAtIHNlZSBiZWxvdw0KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEyIENvbnRyaWJ1 dG9ycyAtIHNlZSBiZWxvdw0KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBh bmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAgKiB3aGlj aCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KQEAg LTUzLDYgKzUzLDggQEANCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQogaW1wb3J0IGphdmEudXRp bC5NYXA7DQogaW1wb3J0IGphdmEudXRpbC5TZXQ7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5n LkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQogDQogaW1wb3J0IGph dmF4LnN3aW5nLnRyZWUuRGVmYXVsdE11dGFibGVUcmVlTm9kZTsNCiBpbXBvcnQgamF2YXguc3dp bmcudHJlZS5EZWZhdWx0VHJlZU1vZGVsOw0KQEAgLTYwLDcgKzYyLDYgQEANCiBpbXBvcnQgamF2 YXguc3dpbmcudHJlZS5UcmVlTm9kZTsNCiBpbXBvcnQgamF2YXguc3dpbmcudHJlZS5UcmVlUGF0 aDsNCiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdv dW1sLmtlcm5lbC5Qcm9qZWN0Ow0KIGltcG9ydCBvcmcuYXJnb3VtbC5rZXJuZWwuUHJvamVjdE1h bmFnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLm1vZGVsLkludmFsaWRFbGVtZW50RXhjZXB0aW9u Ow0KQEAgLTgyLDcgKzgzLDcgQEANCiAgICAgICogTG9nZ2VyLg0KICAgICAgKi8NCiAgICAgcHJp dmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9DQotCUxvZ2dlci5nZXRMb2dnZXIoRXhwbG9y ZXJUcmVlTW9kZWwuY2xhc3MpOw0KKyAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihFeHBsb3JlclRy ZWVNb2RlbC5jbGFzcy5nZXROYW1lKCkpOw0KIA0KICAgICAvKioNCiAgICAgICogYW4gYXJyYXkg b2YNCkBAIC0xMjQsNyArMTI1LDcgQEANCiAJLyoqDQogCSAqIFRoZSBzZXQgb2Ygbm9kZXMgcGVu ZGluZyBiZWluZyB1cGRhdGVkLg0KIAkgKi8NCi0JcHJpdmF0ZSBMaW5rZWRMaXN0PEV4cGxvcmVy VHJlZU5vZGU+IHBlbmRpbmdVcGRhdGVzID0gDQorCXByaXZhdGUgTGlua2VkTGlzdDxFeHBsb3Jl clRyZWVOb2RlPiBwZW5kaW5nVXBkYXRlcyA9DQogCSAgICBuZXcgTGlua2VkTGlzdDxFeHBsb3Jl clRyZWVOb2RlPigpOw0KIA0KIAkvKioNCkBAIC0yMzksNyArMjQwLDcgQEANCiAgICAgfQ0KIA0K ICAgICAvKioNCi0gICAgICogVHJhdmVyc2VzIHRoZSBjaGlsZHJlbiwgZmluZHMgdGhvc2UgYWZm ZWN0ZWQgYnkgdGhlIGdpdmVuIG5vZGUsIA0KKyAgICAgKiBUcmF2ZXJzZXMgdGhlIGNoaWxkcmVu LCBmaW5kcyB0aG9zZSBhZmZlY3RlZCBieSB0aGUgZ2l2ZW4gbm9kZSwNCiAgICAgICogYW5kIG5v dGlmaWVzIHRoZW0gdGhhdCB0aGV5IGFyZSBtb2RpZmllZC4NCiAgICAgICoNCiAgICAgICogQHBh cmFtIHN0YXJ0IHRoZSBub2RlIHRvIHN0YXJ0IGZyb20NCkBAIC0zNzQsNyArMzc1LDcgQEANCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UGF0aFRvUm9vdCgoRXhwbG9yZXJUcmVlTm9k ZSkgY2hpbGQpKSkpIHsNCiAJCQlyZW9yZGVyZWQuYWRkKChFeHBsb3JlclRyZWVOb2RlKSBjaGls ZCk7DQogCQkgICAgfSBlbHNlIHsNCi0JCSAgICAgICAgRXhwbG9yZXJUcmVlTm9kZSBwcmV2ID0g DQorCQkgICAgICAgIEV4cGxvcmVyVHJlZU5vZGUgcHJldiA9DQogCQkgICAgICAgICAgICAoRXhw bG9yZXJUcmVlTm9kZSkgKChFeHBsb3JlclRyZWVOb2RlKSBjaGlsZCkNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC5nZXRQcmV2aW91c1NpYmxpbmcoKTsNCiAJCQl3aGlsZSAocHJl diAhPSBudWxsDQpAQCAtNDYyLDEzICs0NjMsMTIgQEANCiAgICAgICAgICAgICB0cnkgew0KICAg ICAgICAgICAgICAgICBjaGlsZHJlbiA9IHJ1bGUuZ2V0Q2hpbGRyZW4obW9kZWxFbGVtZW50KTsN CiAgICAgICAgICAgICB9IGNhdGNoIChJbnZhbGlkRWxlbWVudEV4Y2VwdGlvbiBlKSB7DQotICAg ICAgICAgICAgICAgIExPRy5kZWJ1ZygiSW52YWxpZEVsZW1lbnRFeGNlcHRpb24gaW4gRXhwbG9y ZXJUcmVlIDogIiANCi0gICAgICAgICAgICAgICAgICAgICAgICArIGUuZ2V0U3RhY2tUcmFjZSgp KTsNCisgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiSW52YWxpZEVsZW1lbnRF eGNlcHRpb24gaW4gRXhwbG9yZXJUcmVlIDogIiwgZSApOw0KICAgICAgICAgICAgIH0NCiANCiAg ICAgICAgICAgICBmb3IgKE9iamVjdCBjaGlsZCA6IGNoaWxkcmVuKSB7DQogICAgICAgICAgICAg ICAgIGlmIChjaGlsZCA9PSBudWxsKSB7DQotICAgICAgICAgICAgICAgICAgICBMT0cud2Fybigi UGVyc3BlY3RpdmVSdWxlICIgKyBydWxlICsgIiB3YW50ZWQgdG8gIg0KKyAgICAgICAgICAgICAg ICAgICAgTE9HLmxvZyhMZXZlbC5XQVJOSU5HLCAiUGVyc3BlY3RpdmVSdWxlICIgKyBydWxlICsg IiB3YW50ZWQgdG8gIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJhZGQgbnVsbCB0 byB0aGUgZXhwbG9yZXIgdHJlZSEiKTsNCiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbmV3 Q2hpbGRyZW4uY29udGFpbnMoY2hpbGQpKSB7DQogICAgICAgICAgICAgICAgICAgICBuZXdDaGls ZHJlbi5hZGQoY2hpbGQpOw0KQEAgLTQ4MCw4ICs0ODAsNyBAQA0KICAgICAgICAgICAgICAgICBT ZXQgZGVwZW5kZW5jaWVzID0gcnVsZS5nZXREZXBlbmRlbmNpZXMobW9kZWxFbGVtZW50KTsNCiAg ICAgICAgICAgICAgICAgZGVwcy5hZGRBbGwoZGVwZW5kZW5jaWVzKTsNCiAgICAgICAgICAgICB9 IGNhdGNoIChJbnZhbGlkRWxlbWVudEV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgICAgIExP Ry5kZWJ1ZygiSW52YWxpZEVsZW1lbnRFeGNlcHRpb24gaW4gRXhwbG9yZXJUcmVlIDogIiANCi0g ICAgICAgICAgICAgICAgICAgICAgICArIGUuZ2V0U3RhY2tUcmFjZSgpKTsNCisgICAgICAgICAg ICAgICAgTE9HLmxvZyhMZXZlbC5GSU5FLCAiSW52YWxpZEVsZW1lbnRFeGNlcHRpb24gaW4gRXhw bG9yZXJUcmVlIDogIiwgZSApOw0KICAgICAgICAgICAgIH0NCiANCiAgICAgICAgIH0NCkBAIC03 NTQsNCArNzUzLDMgQEANCiAgICAgICovDQogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcg c2VyaWFsVmVyc2lvblVJRCA9IDMxMzI3MzI0OTQzODY1NjU4NzBMOw0KIH0NCi0NCg0KTW9kaWZp ZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvZXhwbG9yZXIvTmFt ZU9yZGVyLmphdmENClVybDogaHR0cDovL2FyZ291bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3Nl L2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9leHBsb3Jl ci9OYW1lT3JkZXIuamF2YT92aWV3PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkw Nw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9v cmcvYXJnb3VtbC91aS9leHBsb3Jlci9OYW1lT3JkZXIuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1 bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9leHBsb3Jlci9OYW1lT3JkZXIu amF2YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQN CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0 b3JzIC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3Jz IC0gc2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0 aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFj Y29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNDQs MTAgKzQ0LDEwIEBADQogaW1wb3J0IGphdmF4LnN3aW5nLnRyZWUuRGVmYXVsdE11dGFibGVUcmVl Tm9kZTsNCiANCiBpbXBvcnQgb3JnLmFyZ291bWwuaTE4bi5UcmFuc2xhdG9yOw0KK2ltcG9ydCBv cmcuYXJnb3VtbC5rZXJuZWwuUHJvZmlsZUNvbmZpZ3VyYXRpb247DQogaW1wb3J0IG9yZy5hcmdv dW1sLm1vZGVsLkludmFsaWRFbGVtZW50RXhjZXB0aW9uOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5t b2RlbC5Nb2RlbDsNCiBpbXBvcnQgb3JnLmFyZ291bWwucHJvZmlsZS5Qcm9maWxlOw0KLWltcG9y dCBvcmcuYXJnb3VtbC5rZXJuZWwuUHJvZmlsZUNvbmZpZ3VyYXRpb247DQogaW1wb3J0IG9yZy50 aWdyaXMuZ2VmLmJhc2UuRGlhZ3JhbTsNCiANCiAvKioNCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9h cmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvZXhwbG9yZXIvUGVyc3BlY3RpdmVDb25maWd1 cmF0b3IuamF2YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2Uv YXJnb3VtbC90cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL2V4cGxvcmVy L1BlcnNwZWN0aXZlQ29uZmlndXJhdG9yLmphdmE/dmlldz1kaWZmJnBhdGhyZXY9MTk5MDcmcjE9 MTk5MDYmcjI9MTk5MDcNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRydW5rL3NyYy9hcmdv dW1sLWFwcC9zcmMvb3JnL2FyZ291bWwvdWkvZXhwbG9yZXIvUGVyc3BlY3RpdmVDb25maWd1cmF0 b3IuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJn b3VtbC91aS9leHBsb3Jlci9QZXJzcGVjdGl2ZUNvbmZpZ3VyYXRvci5qYXZhCTIwMTItMTItMzAg MDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQogLyogJElkJA0KICAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cN CisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiBDb250cmlidXRvcnMgLSBzZWUgYmVsb3cNCiAg KiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcg bWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg RWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBk aXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCkBAIC01Myw2ICs1Myw4IEBADQogaW1w b3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsNCiBpbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7 DQogaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZl bDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KIA0KIGltcG9ydCBqYXZheC5z d2luZy5Cb3JkZXJGYWN0b3J5Ow0KIGltcG9ydCBqYXZheC5zd2luZy5Cb3hMYXlvdXQ7DQpAQCAt NzAsNyArNzIsNiBAQA0KIGltcG9ydCBqYXZheC5zd2luZy5ldmVudC5MaXN0U2VsZWN0aW9uRXZl bnQ7DQogaW1wb3J0IGphdmF4LnN3aW5nLmV2ZW50Lkxpc3RTZWxlY3Rpb25MaXN0ZW5lcjsNCiAN Ci1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmkx OG4uVHJhbnNsYXRvcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwuc3dpbmdleHQuU3BhY2VyUGFuZWw7 DQogaW1wb3J0IG9yZy5hcmdvdW1sLnVpLmV4cGxvcmVyLnJ1bGVzLlBlcnNwZWN0aXZlUnVsZTsN CkBAIC0xMDEsNyArMTAyLDcgQEANCiAgICAgICogTG9nZ2VyLg0KICAgICAgKi8NCiAgICAgcHJp dmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9DQotCUxvZ2dlci5nZXRMb2dnZXIoUGVyc3Bl Y3RpdmVDb25maWd1cmF0b3IuY2xhc3MpOw0KKyAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihQZXJz cGVjdGl2ZUNvbmZpZ3VyYXRvci5jbGFzcy5nZXROYW1lKCkpOw0KIA0KICAgICAvKioNCiAgICAg ICogSW5zZXRzIGluIHBpeGVscy4NCkBAIC0xNDQsMjUgKzE0NSwyNSBAQA0KIA0KICAgICAgICAg Y29uZmlnUGFuZWxOb3J0aCA9IG5ldyBKUGFuZWwoKTsNCiAgICAgICAgIGNvbmZpZ1BhbmVsU291 dGggPSBuZXcgSlBhbmVsKCk7DQotICAgICAgICANCisNCiAgICAgICAgIG1ha2VMaXN0cygpOw0K LSAgICAgICAgDQorDQogICAgICAgICBtYWtlQnV0dG9ucygpOw0KLSAgICAgICAgDQorDQogICAg ICAgICBtYWtlTGF5b3V0KCk7DQogICAgICAgICB1cGRhdGVSdWxlTGFiZWwoKTsNCi0gICAgICAg IA0KKw0KICAgICAgICAgbWFrZUxpc3RlbmVycygpOw0KLSAgICAgICAgDQorDQogICAgICAgICBs b2FkUGVyc3BlY3RpdmVzKCk7DQogICAgICAgICBsb2FkTGlicmFyeSgpOw0KICAgICAgICAgLy9z b3J0Skxpc3RNb2RlbChydWxlTGlicmFyeUxpc3QpOw0KLSAgICAgICAgDQorDQogICAgICAgICBz cGxpdFBhbmUgPQ0KICAgICAgICAgICAgIG5ldyBKU3BsaXRQYW5lKEpTcGxpdFBhbmUuVkVSVElD QUxfU1BMSVQsDQogICAgICAgICAgICAgICAgICAgICBjb25maWdQYW5lbE5vcnRoLCBjb25maWdQ YW5lbFNvdXRoKTsNCiAgICAgICAgIHNwbGl0UGFuZS5zZXRDb250aW51b3VzTGF5b3V0KHRydWUp Ow0KLSAgICAgICAgDQorDQogICAgICAgICBzZXRDb250ZW50KHNwbGl0UGFuZSk7DQogICAgIH0N CiANCkBAIC00MzQsNyArNDM1LDcgQEANCiAgICAgICogTG9hZCB0aGUgcGVyc3BlY3RpdmVzIGZy b20gdGhlIHBlcnNwZWN0aXZlIG1hbmFnZXIgZm9yIHByZXNlbnRhdGlvbi4NCiAgICAgICovDQog ICAgIHByaXZhdGUgdm9pZCBsb2FkUGVyc3BlY3RpdmVzKCkgew0KLSAgICAgICAgTGlzdDxFeHBs b3JlclBlcnNwZWN0aXZlPiBwZXJzcGVjdGl2ZXMgPSANCisgICAgICAgIExpc3Q8RXhwbG9yZXJQ ZXJzcGVjdGl2ZT4gcGVyc3BlY3RpdmVzID0NCiAgICAgICAgICAgICBQZXJzcGVjdGl2ZU1hbmFn ZXIuZ2V0SW5zdGFuY2UoKS5nZXRQZXJzcGVjdGl2ZXMoKTsNCiANCiAgICAgICAgIC8vIG11c3Qg YWRkIGFuIGVkaXRhYmxlIGxpc3Qgb2YgbmV3IEV4cGxvcmVyUGVyc3BlY3RpdmUncw0KQEAgLTUx Myw3ICs1MTQsNyBAQA0KICAgICAgICAgICAgIFBlcnNwZWN0aXZlTWFuYWdlci5nZXRJbnN0YW5j ZSgpLnJlbW92ZUFsbFBlcnNwZWN0aXZlcygpOw0KIA0KICAgICAgICAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgcGVyc3BlY3RpdmVMaXN0TW9kZWwuc2l6ZSgpOyBpKyspIHsNCi0gICAgICAgICAg ICAgICAgRXhwbG9yZXJQZXJzcGVjdGl2ZSBwZXJzcGVjdGl2ZSA9IA0KKyAgICAgICAgICAgICAg ICBFeHBsb3JlclBlcnNwZWN0aXZlIHBlcnNwZWN0aXZlID0NCiAgICAgICAgICAgICAgICAgICAg IChFeHBsb3JlclBlcnNwZWN0aXZlKSBwZXJzcGVjdGl2ZUxpc3RNb2RlbC5nZXQoaSk7DQogICAg ICAgICAgICAgICAgIFBlcnNwZWN0aXZlTWFuYWdlci5nZXRJbnN0YW5jZSgpLmFkZFBlcnNwZWN0 aXZlKHBlcnNwZWN0aXZlKTsNCiAgICAgICAgICAgICB9DQpAQCAtNjQzLDcgKzY0NCw3IEBADQog ICAgICAgICBPYmplY3Qgc2VsID0gcnVsZUxpYnJhcnlMaXN0LmdldFNlbGVjdGVkVmFsdWUoKTsN CiAgICAgICAgIGludCBzZWxMaWJOciA9IHJ1bGVMaWJyYXJ5TGlzdC5nZXRTZWxlY3RlZEluZGV4 KCk7DQogICAgICAgICB0cnkgew0KLSAgICAgICAgICAgIFBlcnNwZWN0aXZlUnVsZSBuZXdSdWxl ID0gDQorICAgICAgICAgICAgUGVyc3BlY3RpdmVSdWxlIG5ld1J1bGUgPQ0KICAgICAgICAgICAg ICAgICAoUGVyc3BlY3RpdmVSdWxlKSBzZWwuZ2V0Q2xhc3MoKS5uZXdJbnN0YW5jZSgpOw0KIA0K ICAgICAgICAgICAgIHBlcnNwZWN0aXZlUnVsZXNMaXN0TW9kZWwuaW5zZXJ0RWxlbWVudEF0KG5l d1J1bGUsIDApOw0KQEAgLTY2MCw3ICs2NjEsNyBAQA0KICAgICAgICAgICAgIHJ1bGVMaWJyYXJ5 TGlzdC5zZXRTZWxlY3RlZEluZGV4KHNlbExpYk5yKTsNCiAgICAgICAgICAgICB1cGRhdGVSdWxl TGFiZWwoKTsNCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAg TE9HLmVycm9yKCJwcm9ibGVtIGFkZGluZyBydWxlIiwgZSk7DQorICAgICAgICAgICAgTE9HLmxv ZyhMZXZlbC5TRVZFUkUsICJwcm9ibGVtIGFkZGluZyBydWxlIiwgZSk7DQogICAgICAgICB9DQog ICAgIH0NCiANCg0KTW9kaWZpZWQ6IHRydW5rL3NyYy9hcmdvdW1sLWFwcC9zcmMvb3JnL2FyZ291 bWwvdWkvZXhwbG9yZXIvUGVyc3BlY3RpdmVNYW5hZ2VyLmphdmENClVybDogaHR0cDovL2FyZ291 bWwudGlncmlzLm9yZy9zb3VyY2UvYnJvd3NlL2FyZ291bWwvdHJ1bmsvc3JjL2FyZ291bWwtYXBw L3NyYy9vcmcvYXJnb3VtbC91aS9leHBsb3Jlci9QZXJzcGVjdGl2ZU1hbmFnZXIuamF2YT92aWV3 PWRpZmYmcGF0aHJldj0xOTkwNyZyMT0xOTkwNiZyMj0xOTkwNw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQotLS0gdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9leHBsb3Jl ci9QZXJzcGVjdGl2ZU1hbmFnZXIuamF2YQkob3JpZ2luYWwpDQorKysgdHJ1bmsvc3JjL2FyZ291 bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9leHBsb3Jlci9QZXJzcGVjdGl2ZU1hbmFnZXIuamF2 YQkyMDEyLTEyLTMwIDA1OjA2OjAxLTA4MDANCkBAIC0xLDYgKzEsNiBAQA0KIC8qICRJZCQNCiAg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ29udHJpYnV0b3Jz IC0gc2VlIGJlbG93DQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTIgQ29udHJpYnV0b3JzIC0g c2VlIGJlbG93DQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUg YWNjb21wYW55aW5nIG1hdGVyaWFscw0KICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KICAqIHdoaWNoIGFjY29t cGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQpAQCAtNDMsOCAr NDMsOSBAQA0KIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCiBpbXBvcnQgamF2YS51dGls Lkxpc3Q7DQogaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7DQoraW1wb3J0IGphdmEu dXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQog DQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5h cHBsaWNhdGlvbi5hcGkuQXJnbzsNCiBpbXBvcnQgb3JnLmFyZ291bWwuY29uZmlndXJhdGlvbi5D b25maWd1cmF0aW9uOw0KIGltcG9ydCBvcmcuYXJnb3VtbC5tb2RlbC5Nb2RlbDsNCkBAIC0xNDUs NyArMTQ2LDcgQEANCiAgICAgICogTG9nZ2VyLg0KICAgICAgKi8NCiAgICAgcHJpdmF0ZSBzdGF0 aWMgZmluYWwgTG9nZ2VyIExPRyA9DQotICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKFBlcnNwZWN0 aXZlTWFuYWdlci5jbGFzcyk7DQorICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKFBlcnNwZWN0aXZl TWFuYWdlci5jbGFzcy5nZXROYW1lKCkpOw0KIA0KICAgICBwcml2YXRlIHN0YXRpYyBQZXJzcGVj dGl2ZU1hbmFnZXIgaW5zdGFuY2U7DQogDQpAQCAtMjg5LDIyICsyOTAsMjIgQEANCiANCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdXNlckRlZmluZWRQZXJzcGVjdGl2ZS5hZGRSdWxlKHJ1 bGUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNl cHRpb24gZSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0cuZXJyb3IoDQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVhdGUgcnVsZSAi ICsgcnVsZU5hbWUgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExPRy5sb2coTGV2ZWwu U0VWRVJFLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3Qg Y3JlYXRlIHJ1bGUgIiArIHJ1bGVOYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKyAiIHlvdSBjYW4gdHJ5IHRvICINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICArICJyZWZyZXNoIHRoZSBwZXJzcGVjdGl2ZXMgdG8gdGhlICINCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICArICJkZWZhdWx0IHNldHRpbmdzLiIsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSk7DQogICAgICAgICAgICAgICAgICAgICAg ICAgfSBjYXRjaCAoSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIExPRy5lcnJvcigNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiY291bGQgbm90IGNyZWF0ZSBydWxlICIgKyBydWxlTmFtZSANCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5TRVZFUkUsDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVhdGUgcnVsZSAiICsgcnVsZU5hbWUNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgeW91IGNhbiB0cnkgdG8gIg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgInJlZnJlc2ggdGhlIHBlcnNw ZWN0aXZlcyB0byB0aGUgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsg ImRlZmF1bHQgc2V0dGluZ3MuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhj ZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTE9HLmVycm9yKA0KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY3JlYXRlIHJ1bGUg IiArIHJ1bGVOYW1lIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0cubG9nKExldmVs LlNFVkVSRSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90 IGNyZWF0ZSBydWxlICIgKyBydWxlTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICsgIiB5b3UgY2FuIHRyeSB0byAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKyAicmVmcmVzaCB0aGUgcGVyc3BlY3RpdmVzIHRvIHRoZSAiDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiZGVmYXVsdCBzZXR0aW5ncy4iLA0KQEAgLTUx MCw3ICs1MTEsNyBAQA0KICAgICAgICAgY29tcG9zaXRpb25QZXJzcGVjdGl2ZS5hZGRSdWxlKG5l dyBHb01vZGVsRWxlbWVudFRvQ29udGVudHMoKSk7DQogICAgICAgICBjb21wb3NpdGlvblBlcnNw ZWN0aXZlLmFkZFJ1bGUobmV3IEdvTW9kZWxFbGVtZW50VG9Db250YWluZWREaWFncmFtcygpKTsN CiANCi0gICAgICAgIENvbGxlY3Rpb248RXhwbG9yZXJQZXJzcGVjdGl2ZT4gYyA9IA0KKyAgICAg ICAgQ29sbGVjdGlvbjxFeHBsb3JlclBlcnNwZWN0aXZlPiBjID0NCiAgICAgICAgICAgICBuZXcg QXJyYXlMaXN0PEV4cGxvcmVyUGVyc3BlY3RpdmU+KCk7DQogICAgICAgICBjLmFkZChwYWNrYWdl UGVyc3BlY3RpdmUpOw0KICAgICAgICAgYy5hZGQoY2xhc3NQZXJzcGVjdGl2ZSk7DQpAQCAtNTcw LDE1ICs1NzEsMTUgQEANCiAgICAgICAgICAgICBuZXcgR29QYWNrYWdlVG9DbGFzcygpLA0KICAg ICAgICAgICAgIG5ldyBHb1BhY2thZ2VUb0VsZW1lbnRJbXBvcnQoKSwNCiAgICAgICAgICAgICBu ZXcgR29Qcm9qZWN0VG9Db2xsYWJvcmF0aW9uKCksIG5ldyBHb1Byb2plY3RUb0RpYWdyYW0oKSwN Ci0gICAgICAgICAgICBuZXcgR29Qcm9qZWN0VG9Nb2RlbCgpLCBuZXcgR29Qcm9qZWN0VG9TdGF0 ZU1hY2hpbmUoKSwgDQotICAgICAgICAgICAgbmV3IEdvUHJvamVjdFRvUHJvZmlsZUNvbmZpZ3Vy YXRpb24oKSwgDQorICAgICAgICAgICAgbmV3IEdvUHJvamVjdFRvTW9kZWwoKSwgbmV3IEdvUHJv amVjdFRvU3RhdGVNYWNoaW5lKCksDQorICAgICAgICAgICAgbmV3IEdvUHJvamVjdFRvUHJvZmls ZUNvbmZpZ3VyYXRpb24oKSwNCiAgICAgICAgICAgICBuZXcgR29Qcm9maWxlQ29uZmlndXJhdGlv blRvUHJvZmlsZSgpLA0KICAgICAgICAgICAgIG5ldyBHb1Byb2ZpbGVUb01vZGVsKCksDQogICAg ICAgICAgICAgbmV3IEdvUHJvZmlsZVRvQ3JpdGljcygpLA0KICAgICAgICAgICAgIG5ldyBHb0Ny aXRpY3NUb0NyaXRpYygpLA0KICAgICAgICAgICAgIG5ldyBHb1Byb2plY3RUb1Jvb3RzKCksDQog ICAgICAgICAgICAgbmV3IEdvU2lnbmFsVG9SZWNlcHRpb24oKSwgbmV3IEdvU3RhdGVNYWNoaW5l VG9Ub3AoKSwNCi0gICAgICAgICAgICBuZXcgR29TdGF0ZW1hY2hpbmVUb0RpYWdyYW0oKSwgDQor ICAgICAgICAgICAgbmV3IEdvU3RhdGVtYWNoaW5lVG9EaWFncmFtKCksDQogICAgICAgICAgICAg bmV3IEdvU3RhdGVNYWNoaW5lVG9UcmFuc2l0aW9uKCksIG5ldyBHb1N0YXRlVG9Eb0FjdGl2aXR5 KCksDQogICAgICAgICAgICAgbmV3IEdvU3RhdGVUb0Rvd25zdHJlYW0oKSwgbmV3IEdvU3RhdGVU b0VudHJ5KCksDQogICAgICAgICAgICAgbmV3IEdvU3RhdGVUb0V4aXQoKSwgbmV3IEdvU3RhdGVU b0luY29taW5nVHJhbnMoKSwNCkBAIC01OTUsNyArNTk2LDcgQEANCiAgICAgICAgICAgICBuZXcg R29TdWJtYWNoaW5lU3RhdGVUb1N0YXRlTWFjaGluZSgpLA0KICAgICAgICAgICAgIG5ldyBHb1N0 YXRlVG9JbnRlcm5hbFRyYW5zKCkNCiAgICAgICAgIH07DQotICAgICAgICANCisNCiAgICAgICAg IC8vIFRPRE86IFdlIG5lZWQgYSBmYWN0b3J5IHBhdHRlcm4gZm9yIEdvWFhYIGNsYXNzZXMgdGhh dCBjYW4gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIHJlcXVpcmVkDQogICAgICAgICBQZXJzcGVjdGl2 ZVJ1bGVbXSBydWxlTmFtZXNBcnJheTE0ID0gew0KICAgICAgICAgICAgIG5ldyBHb0NvbXBvc2l0 ZVN0YXRlVG9TdWJ2ZXJ0ZXgoKSwNCkBAIC02MTIsMTAgKzYxMywxMCBAQA0KICAgICAgICAgfSBl bHNlIHsNCiAgICAgICAgICAgICBydWxlTmFtZXNBcnJheSA9IGFwcGVuZEFycmF5cyhydWxlTmFt ZXNBcnJheSwgcnVsZU5hbWVzQXJyYXkyKTsNCiAgICAgICAgIH0NCi0gICAgICAgIA0KKw0KICAg ICAgICAgcnVsZXMgPSBBcnJheXMuYXNMaXN0KHJ1bGVOYW1lc0FycmF5KTsNCiAgICAgfQ0KLSAg ICANCisNCiAgICAgcHJpdmF0ZSA8VD4gVFtdIGFwcGVuZEFycmF5cyhUW10gZmlyc3QsIFRbXSBz ZWNvbmQpIHsNCiAgICAgICAgIGlmIChmaXJzdC5sZW5ndGggPT0gMCkgew0KICAgICAgICAgICAg IHJldHVybiBzZWNvbmQ7DQpAQCAtNjI2LDcgKzYyNyw3IEBADQogICAgICAgICBUW10gcmVzdWx0 ID0gQXJyYXlzLmNvcHlPZihmaXJzdCwgZmlyc3QubGVuZ3RoICsgc2Vjb25kLmxlbmd0aCk7DQog ICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHNlY29uZCwgMCwgcmVzdWx0LCBmaXJzdC5sZW5ndGgs IHNlY29uZC5sZW5ndGgpOw0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCi0gICAgfSAgICANCisg ICAgfQ0KIA0KICAgICAvKioNCiAgICAgICogQWRkIGEgcnVsZSB0byB0aGUgbGlzdCBvZiBydWxl cy4NCkBAIC02ODIsNyArNjgzLDcgQEANCiAgICAgICAgICAgICBwLmRlbGV0ZUNoYXJBdChwLmxl bmd0aCgpIC0gMSk7DQogICAgICAgICAgICAgcC5hcHBlbmQoIjsiKTsNCiAgICAgICAgIH0NCi0g ICAgICAgIA0KKw0KICAgICAgICAgcC5kZWxldGVDaGFyQXQocC5sZW5ndGgoKSAtIDEpOw0KICAg ICAgICAgcmV0dXJuIHAudG9TdHJpbmcoKTsNCiAgICAgfQ0KDQpNb2RpZmllZDogdHJ1bmsvc3Jj L2FyZ291bWwtYXBwL3NyYy9vcmcvYXJnb3VtbC91aS9leHBsb3Jlci9ydWxlcy9Hb1N0YXRlTWFj aGluZVRvU3RhdGUuamF2YQ0KVXJsOiBodHRwOi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9i cm93c2UvYXJnb3VtbC90cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL2V4 cGxvcmVyL3J1bGVzL0dvU3RhdGVNYWNoaW5lVG9TdGF0ZS5qYXZhP3ZpZXc9ZGlmZiZwYXRocmV2 PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0cnVu ay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL2V4cGxvcmVyL3J1bGVzL0dvU3Rh dGVNYWNoaW5lVG9TdGF0ZS5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9zcmMvYXJnb3VtbC1h cHAvc3JjL29yZy9hcmdvdW1sL3VpL2V4cGxvcmVyL3J1bGVzL0dvU3RhdGVNYWNoaW5lVG9TdGF0 ZS5qYXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQogLyogJElk JA0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOS0yMDExIENv bnRyaWJ1dG9ycyAtIHNlZSBiZWxvdw0KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEyIENvbnRy aWJ1dG9ycyAtIHNlZSBiZWxvdw0KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3Jh bSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAgKiB3 aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0K QEAgLTQ1LDggKzQ1LDkgQEANCiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOw0KIGltcG9y dCBqYXZhLnV0aWwuSGFzaFNldDsNCiBpbXBvcnQgamF2YS51dGlsLlNldDsNCitpbXBvcnQgamF2 YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsN CiANCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1s LmkxOG4uVHJhbnNsYXRvcjsNCiBpbXBvcnQgb3JnLmFyZ291bWwubW9kZWwuTW9kZWw7DQogDQpA QCAtNTksOCArNjAsOCBAQA0KIHB1YmxpYyBjbGFzcyBHb1N0YXRlTWFjaGluZVRvU3RhdGUgZXh0 ZW5kcyBBYnN0cmFjdFBlcnNwZWN0aXZlUnVsZSB7DQogDQogICAgIHByaXZhdGUgc3RhdGljIGZp bmFsIExvZ2dlciBMT0cgPQ0KLSAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihHb1N0YXRlTWFjaGlu ZVRvU3RhdGUuY2xhc3MpOw0KLSAgICANCisgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoR29TdGF0 ZU1hY2hpbmVUb1N0YXRlLmNsYXNzLmdldE5hbWUoKSk7DQorDQogICAgIC8qDQogICAgICAqIEBz ZWUgb3JnLmFyZ291bWwudWkuZXhwbG9yZXIucnVsZXMuUGVyc3BlY3RpdmVSdWxlI2dldFJ1bGVO YW1lKCkNCiAgICAgICovDQpAQCAtMTA0LDcgKzEwNSw3IEBADQogCSAgICAgICAgaWYgKE1vZGVs LmdldEZhY2FkZSgpLmdldFVtbFZlcnNpb24oKS5zdGFydHNXaXRoKCIyIikpIHsNCiAgICAgICAg ICAgICAgICAgICAgIC8vIFRPRE86IElnbm9yZSBhbmQgcmVwb3J0IGV4Y2VwdGlvbiB1bnRpbCBn ZXRUb3ANCiAJICAgICAgICAgICAgLy8gaW1wbGVtZW50ZWQuDQotICAgICAgICAgICAgICAgICAg ICBMT0cuZXJyb3IoIkV4cGxvcmVyIGNhdWdodCBleGNlcHRpb24gIiwgZSk7DQorICAgICAgICAg ICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwgIkV4cGxvcmVyIGNhdWdodCBleGNlcHRp b24gIiwgZSk7DQogCSAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgIHRocm93 IGU7DQogCSAgICAgICAgfQ0KDQpNb2RpZmllZDogdHJ1bmsvc3JjL2FyZ291bWwtYXBwL3NyYy9v cmcvYXJnb3VtbC91aS90YXJnZXRtYW5hZ2VyL1RhcmdldE1hbmFnZXIuamF2YQ0KVXJsOiBodHRw Oi8vYXJnb3VtbC50aWdyaXMub3JnL3NvdXJjZS9icm93c2UvYXJnb3VtbC90cnVuay9zcmMvYXJn b3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL3RhcmdldG1hbmFnZXIvVGFyZ2V0TWFuYWdlci5q YXZhP3ZpZXc9ZGlmZiZwYXRocmV2PTE5OTA3JnIxPTE5OTA2JnIyPTE5OTA3DQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCi0tLSB0cnVuay9zcmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3Vp L3RhcmdldG1hbmFnZXIvVGFyZ2V0TWFuYWdlci5qYXZhCShvcmlnaW5hbCkNCisrKyB0cnVuay9z cmMvYXJnb3VtbC1hcHAvc3JjL29yZy9hcmdvdW1sL3VpL3RhcmdldG1hbmFnZXIvVGFyZ2V0TWFu YWdlci5qYXZhCTIwMTItMTItMzAgMDU6MDY6MDEtMDgwMA0KQEAgLTEsNiArMSw2IEBADQogLyog JElkJA0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBDb250 cmlidXRvcnMgLSBzZWUgYmVsb3cNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiBDb250cmli dXRvcnMgLSBzZWUgYmVsb3cNCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0g YW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQogICogd2hp Y2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCkBA IC00Nyw2ICs0Nyw4IEBADQogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsNCiBpbXBvcnQgamF2 YS51dGlsLkxpc3Q7DQogaW1wb3J0IGphdmEudXRpbC5MaXN0SXRlcmF0b3I7DQoraW1wb3J0IGph dmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7 DQogDQogaW1wb3J0IGphdmF4Lm1hbmFnZW1lbnQuTGlzdGVuZXJOb3RGb3VuZEV4Y2VwdGlvbjsN CiBpbXBvcnQgamF2YXgubWFuYWdlbWVudC5Ob3RpZmljYXRpb247DQpAQCAtNTQsNyArNTYsNiBA QA0KIGltcG9ydCBqYXZheC5tYW5hZ2VtZW50Lk5vdGlmaWNhdGlvbkxpc3RlbmVyOw0KIGltcG9y dCBqYXZheC5zd2luZy5ldmVudC5FdmVudExpc3RlbmVyTGlzdDsNCiANCi1pbXBvcnQgb3JnLmFw YWNoZS5sb2c0ai5Mb2dnZXI7DQogaW1wb3J0IG9yZy5hcmdvdW1sLmtlcm5lbC5Qcm9qZWN0Ow0K IGltcG9ydCBvcmcuYXJnb3VtbC5rZXJuZWwuUHJvamVjdE1hbmFnZXI7DQogaW1wb3J0IG9yZy5h cmdvdW1sLm1vZGVsLk1vZGVsOw0KQEAgLTEzOCwxMSArMTM5LDExIEBADQogICAgICAgICBwcml2 YXRlIGludCBjdXJyZW50VGFyZ2V0ID0gLTE7DQogDQogICAgICAgICAvKioNCi0gICAgICAgICAq IFRoZSBsaXN0ZW5lciB0byBVTUwgbW9kZWwgY2hhbmdlcy4gDQotICAgICAgICAgKiBEZWxldGVk IG1vZGVsIGVsZW1lbnRzIGFyZSByZW1vdmVkIA0KLSAgICAgICAgICogZnJvbSB0aGUgaGlzdG9y eSBsaXN0LiANCisgICAgICAgICAqIFRoZSBsaXN0ZW5lciB0byBVTUwgbW9kZWwgY2hhbmdlcy4N CisgICAgICAgICAqIERlbGV0ZWQgbW9kZWwgZWxlbWVudHMgYXJlIHJlbW92ZWQNCisgICAgICAg ICAqIGZyb20gdGhlIGhpc3RvcnkgbGlzdC4NCiAgICAgICAgICAqLw0KLSAgICAgICAgcHJpdmF0 ZSBSZW1vdmVyIHVtbExpc3RlbmVyID0gbmV3IEhpc3RvcnlSZW1vdmVyKCk7IA0KKyAgICAgICAg cHJpdmF0ZSBSZW1vdmVyIHVtbExpc3RlbmVyID0gbmV3IEhpc3RvcnlSZW1vdmVyKCk7DQogDQog ICAgICAgICAvKioNCiAgICAgICAgICAqIERlZmF1bHQgY29uc3RydWN0b3IgdGhhdCByZWdpc3Ry YXRlcyB0aGUgaGlzdG9yeSBtYW5hZ2VyIGFzIHRhcmdldA0KQEAgLTI1OSw3ICsyNjAsNyBAQA0K IA0KICAgICAgICAgLyoqDQogICAgICAgICAgKiBDaGVja3MgaWYgaXQncyBwb3NzaWJsZSB0byBu YXZpZ2F0ZSBiYWNrLg0KLSAgICAgICAgICogDQorICAgICAgICAgKg0KICAgICAgICAgICogQHJl dHVybiB0cnVlIGlmIGl0J3MgcG9zc2libGUgdG8gbmF2aWdhdGUgYmFjay4NCiAgICAgICAgICAq Lw0KICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG5hdmlnYXRlQmFja1Bvc3NpYmxlKCkgew0KQEAg LTM2MSw3ICszNjIsOCBAQA0KICAgICAvKioNCiAgICAgICogVGhlIGxvZzRqIGxvZ2dlciB0byBs b2cgbWVzc2FnZXMgdG8uDQogICAgICAqLw0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dn ZXIgTE9HID0gTG9nZ2VyLmdldExvZ2dlcihUYXJnZXRNYW5hZ2VyLmNsYXNzKTsNCisgICAgcHJp dmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9DQorICAgICAgICBMb2dnZXIuZ2V0TG9nZ2Vy KFRhcmdldE1hbmFnZXIuY2xhc3MuZ2V0TmFtZSgpKTsNCiANCiAgICAgLyoqDQogICAgICAqIFRo ZSBzaW5nbGV0b24gaW5zdGFuY2UuDQpAQCAtMzkzLDEzICszOTUsMTMgQEANCiAgICAgICogaXMg ZW11bGF0ZWQuDQogICAgICAqLw0KICAgICBwcml2YXRlIEhpc3RvcnlNYW5hZ2VyIGhpc3RvcnlN YW5hZ2VyID0gbmV3IEhpc3RvcnlNYW5hZ2VyKCk7DQotICAgIA0KKw0KICAgICAvKioNCi0gICAg ICogVGhlIGxpc3RlbmVyIHRvIFVNTCBtb2RlbCBjaGFuZ2VzLiANCi0gICAgICogRGVsZXRlZCBt b2RlbCBlbGVtZW50cyBhcmUgcmVtb3ZlZCANCi0gICAgICogZnJvbSB0aGUgdGFyZ2V0IGxpc3Qu IA0KKyAgICAgKiBUaGUgbGlzdGVuZXIgdG8gVU1MIG1vZGVsIGNoYW5nZXMuDQorICAgICAqIERl bGV0ZWQgbW9kZWwgZWxlbWVudHMgYXJlIHJlbW92ZWQNCisgICAgICogZnJvbSB0aGUgdGFyZ2V0 IGxpc3QuDQogICAgICAqLw0KLSAgICBwcml2YXRlIFJlbW92ZXIgdW1sTGlzdGVuZXIgPSBuZXcg VGFyZ2V0UmVtb3ZlcigpOyANCisgICAgcHJpdmF0ZSBSZW1vdmVyIHVtbExpc3RlbmVyID0gbmV3 IFRhcmdldFJlbW92ZXIoKTsNCiANCiAgICAgLyoqDQogICAgICAqIEZsYWcgdG8gaW5kaWNhdGUg dGhhdCB0aGVyZSBpcyBhIHNldFRhcmdldCBtZXRob2QgcnVubmluZy4NCkBAIC00ODIsNyArNDg0 LDcgQEANCiAJICAgIHJldHVybjsNCiAJfQ0KIA0KLQlMT0cuZXJyb3IoIlVua25vd24gZXZlbnRO YW1lOiAiICsgZXZlbnROYW1lKTsNCisgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCAiVW5r bm93biBldmVudE5hbWU6ICIgKyBldmVudE5hbWUpOw0KICAgICB9DQogDQogICAgIC8qKg0KQEAg LTU5Niw3ICs1OTgsOCBAQA0KICAgICAgKi8NCiAgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lk IGFkZFRhcmdldChPYmplY3QgdGFyZ2V0KSB7DQogICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNl b2YgVGFyZ2V0TGlzdGVuZXIpIHsNCi0gICAgICAgICAgICBMT0cud2FybigiYWRkVGFyZ2V0IG1l dGhvZCByZWNlaXZlZCBhIFRhcmdldExpc3RlbmVyLCAiDQorICAgICAgICAgICAgTE9HLmxvZyhM ZXZlbC5XQVJOSU5HLA0KKyAgICAgICAgICAgICAgICAgICAgImFkZFRhcmdldCBtZXRob2QgcmVj ZWl2ZWQgYSBUYXJnZXRMaXN0ZW5lciwgIg0KICAgICAgICAgICAgICAgICAgICAgKyAicGVyaGFw cyBhZGRUYXJnZXRMaXN0ZW5lciB3YXMgaW50ZW5kZWQhIC0gIiArIHRhcmdldCk7DQogICAgICAg ICB9DQogCWlmIChpc0luVGFyZ2V0VHJhbnNhY3Rpb24oKSkgew0KQEAgLTcwNCwxMyArNzA3LDEz IEBADQogICAgIC8qKg0KICAgICAgKiBJZiB0aGVyZSBpcyBvbmx5IG9uZSB0YXJnZXQsIHRoZW4g aXQgaXMgcmV0dXJuZWQuDQogICAgICAqIE90aGVyd2lzZSBudWxsLg0KLSAgICAgKiANCisgICAg ICoNCiAgICAgICogQHJldHVybiB0aGUgb25lIGFuZCBvbmx5IHRhcmdldA0KICAgICAgKi8NCiAg ICAgcHVibGljIHN5bmNocm9uaXplZCBPYmplY3QgZ2V0U2luZ2xlVGFyZ2V0KCkgew0KICAgICAg ICAgcmV0dXJuIHRhcmdldHMuc2l6ZSgpID09IDEgPyB0YXJnZXRzLmdldCgwKSA6IG51bGw7DQog ICAgIH0NCi0gICAgDQorDQogICAgIC8qKg0KICAgICAgKiBAcmV0dXJuIHRoZSB0YXJnZXQgZnJv bSB0aGUgbW9kZWwNCiAgICAgICovDQpAQCAtNzcyLDcgKzc3NSw3IEBADQogCSAgICAgICAgICAg ICgoVGFyZ2V0TGlzdGVuZXIpIGxpc3RlbmVyc1tpICsgMV0pLnRhcmdldFNldCh0YXJnZXRFdmVu dCk7DQogCSAgICAgICAgfQ0KIAkgICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7DQot CSAgICAgICAgTE9HLmVycm9yKCJXaGlsZSBjYWxsaW5nIHRhcmdldFNldCBmb3IgIg0KKyAgICAg ICAgICAgICAgICBMT0cubG9nKExldmVsLlNFVkVSRSwgIldoaWxlIGNhbGxpbmcgdGFyZ2V0U2V0 IGZvciAiDQogCSAgICAgICAgICAgICAgICArIHRhcmdldEV2ZW50DQogCSAgICAgICAgICAgICAg ICArICIgaW4gIg0KIAkgICAgICAgICAgICAgICAgKyBsaXN0ZW5lcnNbaSArIDFdDQpAQCAtNzk0 LDEyICs3OTcsMTEgQEANCiAJCSAgICAgICAgLnRhcmdldEFkZGVkKHRhcmdldEV2ZW50KTsNCiAJ CX0NCiAJICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgew0KLQkJTE9HLmVycm9yKCJX aGlsZSBjYWxsaW5nIHRhcmdldEFkZGVkIGZvciAiDQotCQkJICArIHRhcmdldEV2ZW50DQotCQkJ ICArICIgaW4gIg0KLQkJCSAgKyBsaXN0ZW5lcnNbaSArIDFdDQotCQkJICArICIgYW4gZXJyb3Ig aXMgdGhyb3duLiIsDQotCQkJICBlKTsNCisgICAgICAgICAgICAgICAgTE9HLmxvZyhMZXZlbC5T RVZFUkUsDQorICAgICAgICAgICAgICAgICAgICAgICAgIldoaWxlIGNhbGxpbmcgdGFyZ2V0QWRk ZWQgZm9yICINCisgICAgICAgICAgICAgICAgICAgICAgICArIHRhcmdldEV2ZW50ICsgIiBpbiAi ICsgbGlzdGVuZXJzW2kgKyAxXQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhbiBlcnJv ciBpcyB0aHJvd24uIiwNCisgICAgICAgICAgICAgICAgICAgICAgICBlKTsNCiAgICAgICAgICAg ICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsNCiAJICAgIH0NCiAgICAgICAgIH0NCkBAIC04MTYs MTIgKzgxOCwxMCBAQA0KIAkJICAgICAgICAudGFyZ2V0UmVtb3ZlZCh0YXJnZXRFdmVudCk7DQog CQl9DQogCSAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsNCi0JCUxPRy53YXJuKCJX aGlsZSBjYWxsaW5nIHRhcmdldFJlbW92ZWQgZm9yICINCi0JCQkgICsgdGFyZ2V0RXZlbnQNCi0J CQkgICsgIiBpbiAiDQotCQkJICArIGxpc3RlbmVyc1tpICsgMV0NCi0JCQkgICsgIiBhbiBlcnJv ciBpcyB0aHJvd24uIiwNCi0JCQkgIGUpOw0KKyAgICAgICAgICAgICAgICBMT0cubG9nKExldmVs LldBUk5JTkcsICJXaGlsZSBjYWxsaW5nIHRhcmdldFJlbW92ZWQgZm9yICINCisgICAgICAgICAg ICAgICAgICAgICAgICArIHRhcmdldEV2ZW50ICsgIiBpbiAiICsgbGlzdGVuZXJzW2kgKyAxXQ0K KyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhbiBlcnJvciBpcyB0aHJvd24uIiwNCisgICAg ICAgICAgICAgICAgICAgICAgICBlKTsNCiAJICAgIH0NCiAgICAgICAgIH0NCiAgICAgfQ0KQEAg LTg3Nyw3ICs4NzcsNyBAQA0KICAgICAgKiBiZSByZXR1cm5lZC4gSWYgdGhlIHRhcmdldCBpcyBh IGZpZyBidXQgb3duZWQgYnkgYSBtb2RlbGVsZW1lbnQNCiAgICAgICogdGhhdCBtb2RlbGVsZW1l bnQgd2lsbCBiZSByZXR1cm5lZC4gIE90aGVyd2lzZSBudWxsIHdpbGwgYmUNCiAgICAgICogcmV0 dXJuZWQuDQotICAgICAqIA0KKyAgICAgKg0KICAgICAgKiBAcmV0dXJuIHRoZSB0YXJnZXQgaW4g aXQncyAnbW9kZWxmb3JtJy4NCiAgICAgICovDQogICAgIHB1YmxpYyBPYmplY3QgZ2V0TW9kZWxU YXJnZXQoKSB7DQpAQCAtOTEwLDcgKzkxMCw3IEBADQogICAgICAqLw0KICAgICBwdWJsaWMgdm9p ZCBuYXZpZ2F0ZUZvcndhcmQoKSB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIHsNCiAgICAg ICAgIGhpc3RvcnlNYW5hZ2VyLm5hdmlnYXRlRm9yd2FyZCgpOw0KLSAgICAgICAgTE9HLmRlYnVn KCJOYXZpZ2F0ZSBmb3J3YXJkIik7DQorICAgICAgICBMT0cubG9nKExldmVsLkZJTkUsICJOYXZp