IwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgojIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCiMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQojIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCiMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCiMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCnJlcG9ydC5wbHVnaW4ubmFtZT1QbHVnaW5kb2t1bWVudGF0aW9uCnJlcG9ydC5wbHVnaW4uZGVzY3JpcHRpb249RGVubmEgcmFwcG9ydCB0aWxsaGFuZGFo5WxsZXIgbeVsLSBvY2ggcGFyYW1ldGVyZG9rdW1lbnRhdGlvbiBm9nIgZW4gcGx1Z2luLgpyZXBvcnQucGx1Z2luLnRpdGxlPVBsdWdpbmRva3VtZW50YXRpb24KCnJlcG9ydC5wbHVnaW4uZ29hbHMubm9nb2FsPUluZ2EgbeVsIHRpbGxn5G5nbGlnYSDkbm51LgpyZXBvcnQucGx1Z2luLmdvYWxzLmludHJvPVRpbGxn5G5nbGlnYSBt5WwgZvZyIGRlbm5hIHBsdWdpbjoKcmVwb3J0LnBsdWdpbi5nb2Fscy5jb2x1bW4uZ29hbD1N5WwKcmVwb3J0LnBsdWdpbi5nb2Fscy5jb2x1bW4uaXNNYXZlblJlcG9ydD1SYXBwb3J0PwpyZXBvcnQucGx1Z2luLmdvYWxzLmNvbHVtbi5kZXNjcmlwdGlvbj1CZXNrcml2bmluZwpyZXBvcnQucGx1Z2luLmdvYWwubm9kZXNjcmlwdGlvbj1JbmdlbiBiZXNrcml2bmluZy4KcmVwb3J0LnBsdWdpbi5nb2FsLmRlcHJlY2F0ZWQ9RvZy5WxkcmF0LgoKcmVwb3J0LnBsdWdpbi5zeXN0ZW1yZXF1aXJlbWVudHM9U3lzdGVta3JhdgpyZXBvcnQucGx1Z2luLnN5c3RlbXJlcXVpcmVtZW50cy5pbnRybz1G9mxqYW5kZSBtaW5pbWlrcmF2IHN05GxscyBm9nIgYXR0IGv2cmEgZGVubmEgTWF2ZW4gcGx1Z2luOgpyZXBvcnQucGx1Z2luLnN5c3RlbXJlcXVpcmVtZW50cy5ub21pbmltdW09IEluZ2EgbWluaW1pa3Jhdi4KcmVwb3J0LnBsdWdpbi5zeXN0ZW1yZXF1aXJlbWVudHMubWF2ZW49TWF2ZW4KcmVwb3J0LnBsdWdpbi5zeXN0ZW1yZXF1aXJlbWVudHMuamRrPUpESwpyZXBvcnQucGx1Z2luLnN5c3RlbXJlcXVpcmVtZW50cy5tZW1vcnk9TWlubmUKcmVwb3J0LnBsdWdpbi5zeXN0ZW1yZXF1aXJlbWVudHMuZGlza3NwYWNlPURpc2t1dHJ5bW1lCgpyZXBvcnQucGx1Z2luLnVzYWdlPUFuduRuZG5pbmcKcmVwb3J0LnBsdWdpbi51c2FnZS5pbnRybz1EdSBi9nIgc3BlY2lmaWNlcmEgdmVyc2lvbmVuIGkgZGl0dCBwcm9qZWt0cyBwbHVnaW5rb25maWd1cmF0aW9uOgpyZXBvcnQucGx1Z2luLnVzYWdlLnBsdWdpbk1hbmFnZW1lbnQ9RvZyIGF0dCBkZWZpbmllcmEgcGx1Z2ludmVyc2lvbiBpIGRpbiBm9nLkbGRyYS1QT00KcmVwb3J0LnBsdWdpbi51c2FnZS5wbHVnaW5zPUb2ciBhdHQgYW525G5kYSBwbHVnaW4tbeVsZW4gaSBkaW4gUE9NIGVsbGVyIGb2cuRsZHJhLVBPTQpyZXBvcnQucGx1Z2luLnVzYWdlLnJlcG9ydGluZz1G9nIgYXR0IGFuduRuZGEgcmFwcG9ydC1t5WxlbiBpIGRpbiBQT00gZWxsZXIgZvZy5GxkcmEtUE9NCnJlcG9ydC5wbHVnaW4uY29uZmlndXJhdGlvbi5lbmQ9RvZyIG1lciBpbmZvcm1hdGlvbiwgbORzIHsiR3VpZGUgdG8gQ29uZmlndXJpbmcgUGx1Zy1pbnMiLCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9ndWlkZXMvbWluaS9ndWlkZS1jb25maWd1cmluZy1wbHVnaW5zLmh0bWx9IChw5SBlbmdlbHNrYSkuCgpyZXBvcnQucGx1Z2luLmlzUmVwb3J0PUphCnJlcG9ydC5wbHVnaW4uaXNOb3RSZXBvcnQ9TmVqCg==