PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KCjwhLS0KTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQpvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQp0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCiJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLApzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgoiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCnNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKdW5kZXIgdGhlIExpY2Vuc2UuCi0tPgo8cHJvamVjdCB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4gIAogIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4gIAogIDxncm91cElkPk5QYW5kYXkuUHJvamVjdDwvZ3JvdXBJZD4gIAogIDxhcnRpZmFjdElkPk5QYW5kYXkuUHJvamVjdDwvYXJ0aWZhY3RJZD4gIAogIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+ICAKICA8dmVyc2lvbj4xLjAuMTwvdmVyc2lvbj4gIAogIDxuYW1lPk5QYW5kYXkuUHJvamVjdDwvbmFtZT4gIAogIDx1cmw+aHR0cDovL2luY3ViYXRvci5hcGFjaGUub3JnL25wYW5kYXk8L3VybD4gIAogIDxkZXNjcmlwdGlvbj5OUGFuZGF5IHByb3ZpZGVzIE1hdmVuIDIueCBwbHVnaW5zIHRvIHN1cHBvcnQgYnVpbGRpbmcgb2YgLk5FVCBhcHBsaWNhdGlvbnM8L2Rlc2NyaXB0aW9uPiAgCiAgPG1haWxpbmdMaXN0cz4gCiAgICA8bWFpbGluZ0xpc3Q+IAogICAgICA8bmFtZT5OUGFuZGF5IERldiBMaXN0PC9uYW1lPiAgCiAgICAgIDxwb3N0Pm5wYW5kYXlAZGlzY3Vzc2lvbnMuY29kZXBsZXguY29tPC9wb3N0PiAgCiAgICAgIDxvdGhlckFyY2hpdmVzPiAKICAgICAgICA8b3RoZXJBcmNoaXZlPmh0dHA6Ly9uMi5uYWJibGUuY29tL05QYW5kYXktRGlzY3Vzc2lvbnMtZjE2NTcxMzEuaHRtbDwvb3RoZXJBcmNoaXZlPiAKICAgICAgPC9vdGhlckFyY2hpdmVzPiAKICAgIDwvbWFpbGluZ0xpc3Q+ICAKICA8L21haWxpbmdMaXN0cz4gIAogIDxzY20+IAogICAgPHVybD5odHRwczovL25wYW5kYXkuc3ZuLmNvZGVwbGV4LmNvbS9zdm4vPC91cmw+ICAKICAgIDxjb25uZWN0aW9uPnNjbTpzdm46aHR0cHM6Ly9ucGFuZGF5LnN2bi5jb2RlcGxleC5jb20vc3ZuLzwvY29ubmVjdGlvbj4gIAogICAgPGRldmVsb3BlckNvbm5lY3Rpb24+c2NtOnN2bjpodHRwczovL25wYW5kYXkuc3ZuLmNvZGVwbGV4LmNvbS9zdm4vPC9kZXZlbG9wZXJDb25uZWN0aW9uPiAgCiAgICA8dGFnPlJFTF8wXzlfU05BUFNIT1Q8L3RhZz4gCiAgPC9zY20+ICAKICA8b3JnYW5pemF0aW9uPiAKICAgIDxuYW1lPk5QYW5kYXk8L25hbWU+ICAKICAgIDx1cmw+aHR0cDovL2NvZGVwbGV4LmNvbS9ucGFuZGF5PC91cmw+IAogIDwvb3JnYW5pemF0aW9uPiAgCiAgPGlzc3VlTWFuYWdlbWVudD4gCiAgICA8c3lzdGVtPkNvZGVwbGV4IElzc3VlIFRyYWNrZXI8L3N5c3RlbT4gIAogICAgPHVybD5odHRwOi8vd3d3LmNvZGVwbGV4LmNvbS9ucGFuZGF5L1dvcmtJdGVtL0xpc3QuYXNweDwvdXJsPiAKICA8L2lzc3VlTWFuYWdlbWVudD4gIAogIDxsaWNlbnNlcz4gCiAgICA8bGljZW5zZT4gCiAgICAgIDxuYW1lPkFwYWNoZSAyLjA8L25hbWU+ICAKICAgICAgPHVybD5MSUNFTlNFLnR4dDwvdXJsPiAKICAgIDwvbGljZW5zZT4gCiAgPC9saWNlbnNlcz4gIAogIDxkZXZlbG9wZXJzPiAKICAgIDxkZXZlbG9wZXI+IAogICAgICA8bmFtZT5CcmV0dCBQb3J0ZXI8L25hbWU+ICAKICAgICAgPGlkPmJyZXR0cG9ydGVyPC9pZD4gIAogICAgICA8ZW1haWw+YnJldHRAYXBhY2hlLm9yZzwvZW1haWw+ICAKICAgICAgPHJvbGVzPiAKICAgICAgICA8cm9sZT5jb29yZGluYXRvcjwvcm9sZT4gIAogICAgICA8L3JvbGVzPiAKICAgIDwvZGV2ZWxvcGVyPiAgCiAgICA8ZGV2ZWxvcGVyPiAKICAgICAgPG5hbWU+TWVsdmluIFNlbWJyYW5vPC9uYW1lPiAgCiAgICAgIDxpZD5tZWx2aW5zZW1icmFubzwvaWQ+ICAKICAgICAgPGVtYWlsPm1lbHZpbnNlbWJyYW5vQGdtYWlsLmNvbTwvZW1haWw+ICAKICAgICAgPHJvbGVzPiAKICAgICAgICA8cm9sZT5jb29yZGluYXRvcjwvcm9sZT4gIAogICAgICA8L3JvbGVzPiAKICAgIDwvZGV2ZWxvcGVyPiAgCiAgICA8ZGV2ZWxvcGVyPiAKICAgICAgPG5hbWU+TGVvcG9sZG8gQWdkZXBwYTwvbmFtZT4gIAogICAgICA8aWQ+bGFnZGVwcGE8L2lkPiAgCiAgICAgIDxlbWFpbD5sYWdkZXBwYUBleGlzdC5jb208L2VtYWlsPiAgCiAgICAgIDxyb2xlcz4gCiAgICAgICAgPHJvbGU+ZGV2ZWxvcGVyPC9yb2xlPiAgCiAgICAgIDwvcm9sZXM+IAogICAgPC9kZXZlbG9wZXI+ICAKICAgIDxkZXZlbG9wZXI+IAogICAgICA8bmFtZT5KYW4gQW5jYWphczwvbmFtZT4gIAogICAgICA8aWQ+amFuY2FqYXM8L2lkPiAgCiAgICAgIDxlbWFpbD5qYW5jYWphc0BleGlzdC5jb208L2VtYWlsPiAgCiAgICAgIDxyb2xlcz4gCiAgICAgICAgPHJvbGU+ZGV2ZWxvcGVyPC9yb2xlPiAgCiAgICAgIDwvcm9sZXM+IAogICAgPC9kZXZlbG9wZXI+ICAKICAgIDxkZXZlbG9wZXI+IAogICAgICA8bmFtZT5Kb2UgT2NhYmE8L25hbWU+ICAKICAgICAgPGlkPmpvY2FiYTwvaWQ+ICAKICAgICAgPGVtYWlsPmpvY2FiYUBleGlzdC5jb208L2VtYWlsPiAgCiAgICAgIDxyb2xlcz4gCiAgICAgICAgPHJvbGU+ZGV2ZWxvcGVyPC9yb2xlPiAgCiAgICAgIDwvcm9sZXM+IAogICAgPC9kZXZlbG9wZXI+ICAKICAgIDxkZXZlbG9wZXI+IAogICAgICA8bmFtZT5TaGVpbiBFcm5hY2lvPC9uYW1lPiAgCiAgICAgIDxpZD5zZXJuYWNpbzwvaWQ+ICAKICAgICAgPGVtYWlsPnNlcm5hY2lvQGV4aXN0LmNvbTwvZW1haWw+ICAKICAgICAgPHJvbGVzPiAKICAgICAgICA8cm9sZT5kZXZlbG9wZXI8L3JvbGU+ICAKICAgICAgPC9yb2xlcz4gCiAgICA8L2RldmVsb3Blcj4gIAogICAgPGRldmVsb3Blcj4gCiAgICAgIDxuYW1lPkPpZHJpYzwvbmFtZT4gIAogICAgICA8aWQ+bWltaWw8L2lkPiAgCiAgICAgIDxyb2xlcz4gCiAgICAgICAgPHJvbGU+ZGV2ZWxvcGVyPC9yb2xlPiAgCiAgICAgIDwvcm9sZXM+IAogICAgPC9kZXZlbG9wZXI+ICAKICAgIDxkZXZlbG9wZXI+IAogICAgICA8bmFtZT5NYXJpY29yIEJhY2xheTwvbmFtZT4gIAogICAgICA8aWQ+bWJhY2xheTwvaWQ+ICAKICAgICAgPGVtYWlsPm1iYWNsYXlAZXhpc3QuY29tPC9lbWFpbD4gIAogICAgICA8cm9sZXM+IAogICAgICAgIDxyb2xlPlFBPC9yb2xlPiAgCiAgICAgIDwvcm9sZXM+IAogICAgPC9kZXZlbG9wZXI+ICAKICAgIDwhLS1FbWVyaXR1cyBDb21taXR0ZXJzLS0+CiAgICA8ZGV2ZWxvcGVyPiAKICAgICAgPG5hbWU+U2hhbmUgSXNiZWxsPC9uYW1lPiAgCiAgICAgIDxpZD5zaXNiZWxsPC9pZD4gIAogICAgICA8ZW1haWw+c2lzYmVsbEBhcGFjaGUub3JnPC9lbWFpbD4gIAogICAgICA8dXJsPmh0dHA6Ly9qcm9sbGVyLmNvbS9wYWdlL3JhbmRvbTc8L3VybD4gIAogICAgPC9kZXZlbG9wZXI+ICAgICAgCiAgICA8ZGV2ZWxvcGVyPiAKICAgICAgPG5hbWU+RXZhbiBXb3JsZXk8L25hbWU+ICAKICAgICAgPGlkPmV3b3JsZXk8L2lkPiAgCiAgICAgIDxlbWFpbD5ld29ybGV5QGFwYWNoZS5vcmc8L2VtYWlsPiAgCiAgICA8L2RldmVsb3Blcj4gICAgICAgIAogICAgPCEtLUVtZXJpdHVzIENvbW1pdHRlcnMtLT4KICA8L2RldmVsb3BlcnM+ICAKICA8bW9kdWxlcz4gCiAgICA8bW9kdWxlPmFzc2VtYmxpZXM8L21vZHVsZT4gIAogICAgPG1vZHVsZT5wbHVnaW5zL25ldHBsdWdpbnM8L21vZHVsZT4gCiAgPC9tb2R1bGVzPiAgCiAgPGJ1aWxkPiAKICAgIDxleHRlbnNpb25zPiAKICAgICAgPGV4dGVuc2lvbj4gCiAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi53YWdvbjwvZ3JvdXBJZD4gIAogICAgICAgIDxhcnRpZmFjdElkPndhZ29uLXNzaC1leHRlcm5hbDwvYXJ0aWZhY3RJZD4gIAogICAgICAgIDx2ZXJzaW9uPjEuMC1iZXRhLTI8L3ZlcnNpb24+IAogICAgICA8L2V4dGVuc2lvbj4gIAogICAgICA8ZXh0ZW5zaW9uPiAKICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLndhZ29uPC9ncm91cElkPiAgCiAgICAgICAgPGFydGlmYWN0SWQ+d2Fnb24td2ViZGF2PC9hcnRpZmFjdElkPiAgCiAgICAgICAgPHZlcnNpb24+MS4wLWJldGEtMjwvdmVyc2lvbj4gCiAgICAgIDwvZXh0ZW5zaW9uPiAKICAgIDwvZXh0ZW5zaW9ucz4gIAogICAgPHNvdXJjZURpcmVjdG9yeT5zcmMvbWFpbi9jc2hhcnA8L3NvdXJjZURpcmVjdG9yeT4gIAogICAgPHRlc3RTb3VyY2VEaXJlY3Rvcnk+c3JjL3Rlc3QvY3NoYXJwPC90ZXN0U291cmNlRGlyZWN0b3J5PiAgCiAgICA8cGx1Z2lucz4gCiAgICAgIDxwbHVnaW4+IAogICAgICAgIDxncm91cElkPm5wYW5kYXkucGx1Z2luPC9ncm91cElkPiAgCiAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZS1wbHVnaW48L2FydGlmYWN0SWQ+ICAKICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPiAgCiAgICAgICAgPGNvbmZpZ3VyYXRpb24+IAogICAgICAgICAgPGZyYW1ld29ya1ZlcnNpb24+Mi4wLjUwNzI3PC9mcmFtZXdvcmtWZXJzaW9uPiAKICAgICAgICA8L2NvbmZpZ3VyYXRpb24+IAogICAgICA8L3BsdWdpbj4gIAogICAgICA8cGx1Z2luPiAKICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+ICAKICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1yZWxlYXNlLXBsdWdpbjwvYXJ0aWZhY3RJZD4gIAogICAgICAgIDxjb25maWd1cmF0aW9uPiAKICAgICAgICAgIDx0YWdCYXNlPmh0dHBzOi8vbnBhbmRheS5zdm4uY29kZXBsZXguY29tL3N2bi90YWdzPC90YWdCYXNlPiAKICAgICAgICA8L2NvbmZpZ3VyYXRpb24+IAogICAgICA8L3BsdWdpbj4gCiAgICA8L3BsdWdpbnM+IAogIDwvYnVpbGQ+ICAKICA8ZGVwZW5kZW5jeU1hbmFnZW1lbnQ+IAogICAgPGRlcGVuZGVuY2llcz4gCiAgICAgIDxkZXBlbmRlbmN5PiAKICAgICAgICA8Z3JvdXBJZD5NaWNyb3NvZnQuQnVpbGQuRW5naW5lPC9ncm91cElkPiAgCiAgICAgICAgPGFydGlmYWN0SWQ+TWljcm9zb2Z0LkJ1aWxkLkVuZ2luZTwvYXJ0aWZhY3RJZD4gIAogICAgICAgIDx0eXBlPmdhY19tc2lsPC90eXBlPiAgCiAgICAgICAgPHZlcnNpb24+Mi4wLjAuMDwvdmVyc2lvbj4gIAogICAgICAgIDxjbGFzc2lmaWVyPmIwM2Y1ZjdmMTFkNTBhM2E8L2NsYXNzaWZpZXI+IAogICAgICA8L2RlcGVuZGVuY3k+ICAKICAgICAgPGRlcGVuZGVuY3k+IAogICAgICAgIDxncm91cElkPkVudkRURTwvZ3JvdXBJZD4gIAogICAgICAgIDxhcnRpZmFjdElkPkVudkRURTwvYXJ0aWZhY3RJZD4gIAogICAgICAgIDx0eXBlPmdhYzwvdHlwZT4gIAogICAgICAgIDx2ZXJzaW9uPjguMC4wLjA8L3ZlcnNpb24+ICAKICAgICAgICA8Y2xhc3NpZmllcj5iMDNmNWY3ZjExZDUwYTNhPC9jbGFzc2lmaWVyPiAKICAgICAgPC9kZXBlbmRlbmN5PiAgCiAgICAgIDxkZXBlbmRlbmN5PiAKICAgICAgICA8Z3JvdXBJZD5FbnZEVEU4MDwvZ3JvdXBJZD4gIAogICAgICAgIDxhcnRpZmFjdElkPkVudkRURTgwPC9hcnRpZmFjdElkPiAgCiAgICAgICAgPHR5cGU+Z2FjPC90eXBlPiAgCiAgICAgICAgPHZlcnNpb24+OC4wLjAuMDwvdmVyc2lvbj4gIAogICAgICAgIDxjbGFzc2lmaWVyPmIwM2Y1ZjdmMTFkNTBhM2E8L2NsYXNzaWZpZXI+IAogICAgICA8L2RlcGVuZGVuY3k+ICAKICAgICAgPGRlcGVuZGVuY3k+IAogICAgICAgIDxncm91cElkPk1pY3Jvc29mdC5WaXN1YWxTdHVkaW8uQ29tbWFuZEJhcnM8L2dyb3VwSWQ+ICAKICAgICAgICA8YXJ0aWZhY3RJZD5NaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLkNvbW1hbmRCYXJzPC9hcnRpZmFjdElkPiAgCiAgICAgICAgPHZlcnNpb24+OC4wLjAuMDwvdmVyc2lvbj4gIAogICAgICAgIDxjbGFzc2lmaWVyPmIwM2Y1ZjdmMTFkNTBhM2E8L2NsYXNzaWZpZXI+ICAKICAgICAgICA8dHlwZT5nYWM8L3R5cGU+IAogICAgICA8L2RlcGVuZGVuY3k+ICAKICAgICAgPGRlcGVuZGVuY3k+IAogICAgICAgIDxncm91cElkPk1pY3Jvc29mdC5WaXN1YWxTdHVkaW8uVGVtcGxhdGVXaXphcmRJbnRlcmZhY2U8L2dyb3VwSWQ+ICAKICAgICAgICA8YXJ0aWZhY3RJZD5NaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlRlbXBsYXRlV2l6YXJkSW50ZXJmYWNlPC9hcnRpZmFjdElkPiAgCiAgICAgICAgPHZlcnNpb24+OC4wLjAuMDwvdmVyc2lvbj4gIAogICAgICAgIDxjbGFzc2lmaWVyPmIwM2Y1ZjdmMTFkNTBhM2E8L2NsYXNzaWZpZXI+ICAKICAgICAgICA8dHlwZT5nYWNfbXNpbDwvdHlwZT4gCiAgICAgIDwvZGVwZW5kZW5jeT4gIAogICAgICA8ZGVwZW5kZW5jeT4gCiAgICAgICAgPGdyb3VwSWQ+RXh0ZW5zaWJpbGl0eTwvZ3JvdXBJZD4gIAogICAgICAgIDxhcnRpZmFjdElkPkV4dGVuc2liaWxpdHk8L2FydGlmYWN0SWQ+ICAKICAgICAgICA8dHlwZT5nYWM8L3R5cGU+ICAKICAgICAgICA8dmVyc2lvbj43LjAuMzMwMC4wPC92ZXJzaW9uPiAgCiAgICAgICAgPGNsYXNzaWZpZXI+YjAzZjVmN2YxMWQ1MGEzYTwvY2xhc3NpZmllcj4gCiAgICAgIDwvZGVwZW5kZW5jeT4gIAogICAgICA8ZGVwZW5kZW5jeT4gCiAgICAgICAgPGdyb3VwSWQ+TlVuaXQ8L2dyb3VwSWQ+ICAKICAgICAgICA8YXJ0aWZhY3RJZD5OVW5pdC5GcmFtZXdvcms8L2FydGlmYWN0SWQ+ICAKICAgICAgICA8dmVyc2lvbj4yLjIuOC4wPC92ZXJzaW9uPiAgCiAgICAgICAgPHR5cGU+bGlicmFyeTwvdHlwZT4gIAogICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4gCiAgICAgIDwvZGVwZW5kZW5jeT4gCiAgICA8L2RlcGVuZGVuY2llcz4gCiAgPC9kZXBlbmRlbmN5TWFuYWdlbWVudD4gCjwvcHJvamVjdD4K