PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPg0KPCEtLU5ld1BhZ2UtLT4NCjxIVE1MPg0KPEhFQUQ+DQo8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBOb3YgMjIgMTc6MTI6NTMgRVNUIDIwMDcgLS0+DQo8VElUTEU+DQpYYWxhbi1KYXZhIDIuNy4xOiBDbGFzcyAgRXh0ZW5zaW9uSGFuZGxlckphdmFQYWNrYWdlDQo8L1RJVExFPg0KPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPg0KPC9IRUFEPg0KPEJPRFkgQkdDT0xPUj0id2hpdGUiPg0KDQo8IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+DQo8QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+DQo8VFI+DQo8VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+DQo8QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4NCiAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4NCiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+DQogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4NCiAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+DQogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvRXh0ZW5zaW9uSGFuZGxlckphdmFQYWNrYWdlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4NCiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPg0KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+DQogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+DQogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPg0KICA8L1RSPg0KPC9UQUJMRT4NCjwvVEQ+DQo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4NCjwvRU0+DQo8L1REPg0KPC9UUj4NCg0KPFRSPg0KPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4NCiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUveGFsYW4vZXh0ZW5zaW9ucy9FeHRlbnNpb25IYW5kbGVySmF2YUNsYXNzLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOw0KJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS94YWxhbi9leHRlbnNpb25zL0V4dGVuc2lvbk5hbWVzcGFjZUNvbnRleHQuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+DQo8VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPg0KICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsNCiZuYnNwOzxBIEhSRUY9IkV4dGVuc2lvbkhhbmRsZXJKYXZhUGFja2FnZS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+PC9GT05UPjwvVEQ+DQo8L1RSPg0KPFRSPg0KPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4NCiAgU1VNTUFSWTogJm5ic3A7SU5ORVImbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+DQo8VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPg0KREVUQUlMOiAmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+DQo8L1RSPg0KPC9UQUJMRT4NCjwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4NCg0KPEhSPg0KPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPg0KPEgyPg0KPEZPTlQgU0laRT0iLTEiPg0Kb3JnLmFwYWNoZS54YWxhbi5leHRlbnNpb25zPC9GT05UPg0KPEJSPg0KQ2xhc3MgIEV4dGVuc2lvbkhhbmRsZXJKYXZhUGFja2FnZTwvSDI+DQo8UFJFPg0KamF2YS5sYW5nLk9iamVjdA0KICB8DQogICstLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUveGFsYW4vZXh0ZW5zaW9ucy9FeHRlbnNpb25IYW5kbGVyLmh0bWwiPm9yZy5hcGFjaGUueGFsYW4uZXh0ZW5zaW9ucy5FeHRlbnNpb25IYW5kbGVyPC9BPg0KICAgICAgICB8DQogICAgICAgICstLTxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUveGFsYW4vZXh0ZW5zaW9ucy9FeHRlbnNpb25IYW5kbGVySmF2YS5odG1sIj5vcmcuYXBhY2hlLnhhbGFuLmV4dGVuc2lvbnMuRXh0ZW5zaW9uSGFuZGxlckphdmE8L0E+DQogICAgICAgICAgICAgIHwNCiAgICAgICAgICAgICAgKy0tPEI+b3JnLmFwYWNoZS54YWxhbi5leHRlbnNpb25zLkV4dGVuc2lvbkhhbmRsZXJKYXZhUGFja2FnZTwvQj4NCjwvUFJFPg0KPEhSPg0KPERMPg0KPERUPnB1YmxpYyBjbGFzcyA8Qj5FeHRlbnNpb25IYW5kbGVySmF2YVBhY2thZ2U8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS94YWxhbi9leHRlbnNpb25zL0V4dGVuc2lvbkhhbmRsZXJKYXZhLmh0bWwiPkV4dGVuc2lvbkhhbmRsZXJKYXZhPC9BPjwvREw+DQoNCjxQPg0KUmVwcmVzZW50cyBhbiBleHRlbnNpb24gbmFtZXNwYWNlIGZvciBYUGF0aCB0aGF0IGhhbmRsZXMgamF2YSBwYWNrYWdlcwogdGhhdCBtYXkgYmUgZnVsbHkgb3IgcGFydGlhbGx5IHNwZWNpZmllZC4KIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIGNsYXNzIFVSSSBiZSBvZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKIDxwcmU+CiAgIHhhbGFuOi8vcGFydGlhbC5jbGFzcy5uYW1lCiAgIHhhbGFuOi8vCiAgIGh0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbi9qYXZhICh3aGljaCBpcyB0aGUgc2FtZSBhcyB4YWxhbjovLykKIDwvcHJlPgogSG93ZXZlciwgd2UgZG8gbm90IGVuZm9yY2UgdGhpcy4gIElmIHRoZSBjbGFzcyBuYW1lIGNvbnRhaW5zIGEKIGEgLywgd2Ugb25seSB1c2UgdGhlIHBhcnQgdG8gdGhlIHJpZ2h0IG9mIHRoZSByaWdodG1vc3Qgc2xhc2guCiBJbiBhZGRpdGlvbiwgd2UgaWdub3JlIGFueSAiY2xhc3M6IiBwcmVmaXguCiBQcm92aWRlcyBmdW5jdGlvbnMgdG8gdGVzdCBhIGZ1bmN0aW9uJ3MgZXhpc3RlbmNlIGFuZCBjYWxsIGEgZnVuY3Rpb24uCiBBbHNvIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byB0ZXN0IGFuIGVsZW1lbnQncyBleGlzdGVuY2UgYW5kIGNhbGwgYW4KIGVsZW1lbnQuDQo8UD4NCjxETD4NCjxEVD48Qj5Vc2FnZTo8L0I+PEREPjxpPjxmb250IHNpemU9Ii0xIiBjb2xvcj0iI0ZGMDAwMCI+ICoqRm9yIGludGVybmFsIHVzZSBvbmx5Kio8L2ZvbnQ+PC9pPjwvREQ+CjwvREQ+DQo8L0RMPg0KPEhSPg0KDQo8UD4NCjwhLS0gPT09PT09PT0gSU5ORVIgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4NCg0KDQo8IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+DQoNCg0KPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPg0KDQo8QSBOQU1FPSJjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+DQo8VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4NCjxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPg0KPEI+Q29uc3RydWN0b3IgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4NCjwvVFI+DQo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4NCjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3hhbGFuL2V4dGVuc2lvbnMvRXh0ZW5zaW9uSGFuZGxlckphdmFQYWNrYWdlLmh0bWwjRXh0ZW5zaW9uSGFuZGxlckphdmFQYWNrYWdlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj5FeHRlbnNpb25IYW5kbGVySmF2YVBhY2thZ2U8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZXNwYWNlVXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO3NjcmlwdExhbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7Y2xhc3NOYW1lKTwvQ09ERT4NCg0KPEJSPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0IGEgbmV3IGV4dGVuc2lvbiBuYW1lc3BhY2UgaGFuZGxlciBnaXZlbiBhbGwgdGhlIGluZm9ybWF0aW9uCiBuZWVkZWQuPC9URD4NCjwvVFI+DQo8L1RBQkxFPg0KJm5ic3A7DQo8IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+DQoNCjxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+DQo8VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4NCjxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPg0KPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+DQo8L1RSPg0KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+DQo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+DQo8Q09ERT4mbmJzcDtqYXZhLmxhbmcuT2JqZWN0PC9DT0RFPjwvRk9OVD48L1REPg0KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUveGFsYW4vZXh0ZW5zaW9ucy9FeHRlbnNpb25IYW5kbGVySmF2YVBhY2thZ2UuaHRtbCNjYWxsRnVuY3Rpb24ob3JnLmFwYWNoZS54cGF0aC5mdW5jdGlvbnMuRnVuY0V4dEZ1bmN0aW9uLCBqYXZhLnV0aWwuVmVjdG9yLCBvcmcuYXBhY2hlLnhhbGFuLmV4dGVuc2lvbnMuRXhwcmVzc2lvbkNvbnRleHQpIj5jYWxsRnVuY3Rpb248L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3hwYXRoL2Z1bmN0aW9ucy9GdW5jRXh0RnVuY3Rpb24uaHRtbCI+RnVuY0V4dEZ1bmN0aW9uPC9BPiZuYnNwO2V4dEZ1bmN0aW9uLAogICAgICAgICAgICAgamF2YS51dGlsLlZlY3RvciZuYnNwO2FyZ3MsCiAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3hhbGFuL2V4dGVuc2lvbnMvRXhwcmVzc2lvbkNvbnRleHQuaHRtbCI+RXhwcmVzc2lvbkNvbnRleHQ8L0E+Jm5ic3A7ZXhwckNvbnRleHQpPC9DT0RFPg0KDQo8QlI+DQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQcm9jZXNzIGEgY2FsbCB0byBhbiBYUGF0aCBleHRlbnNpb24gZnVuY3Rpb248L1REPg0KPC9UUj4NCjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPg0KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPg0KPENPREU+Jm5ic3A7amF2YS5sYW5nLk9iamVjdDwvQ09ERT48L0ZPTlQ+PC9URD4NCjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3hhbGFuL2V4dGVuc2lvbnMvRXh0ZW5zaW9uSGFuZGxlckphdmFQYWNrYWdlLmh0bWwjY2FsbEZ1bmN0aW9uKGphdmEubGFuZy5TdHJpbmcsIGphdmEudXRpbC5WZWN0b3IsIGphdmEubGFuZy5PYmplY3QsIG9yZy5hcGFjaGUueGFsYW4uZXh0ZW5zaW9ucy5FeHByZXNzaW9uQ29udGV4dCkiPmNhbGxGdW5jdGlvbjwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtmdW5jTmFtZSwKICAgICAgICAgICAgIGphdmEudXRpbC5WZWN0b3ImbmJzcDthcmdzLAogICAgICAgICAgICAgamF2YS5sYW5nLk9iamVjdCZuYnNwO21ldGhvZEtleSwKICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUveGFsYW4vZXh0ZW5zaW9ucy9FeHByZXNzaW9uQ29udGV4dC5odG1sIj5FeHByZXNzaW9uQ29udGV4dDwvQT4mbmJzcDtleHByQ29udGV4dCk8L0NPREU+DQoNCjxCUj4NCiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1Byb2Nlc3MgYSBjYWxsIHRvIGEgZnVuY3Rpb24gaW4gdGhlIHBhY2thZ2UgamF2YSBuYW1lc3BhY2UuPC9URD4NCjwvVFI+DQo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4NCjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4NCjxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+DQo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS94YWxhbi9leHRlbnNpb25zL0V4dGVuc2lvbkhhbmRsZXJKYXZhUGFja2FnZS5odG1sI2lzRWxlbWVudEF2YWlsYWJsZShqYXZhLmxhbmcuU3RyaW5nKSI+aXNFbGVtZW50QXZhaWxhYmxlPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2VsZW1lbnQpPC9DT0RFPg0KDQo8QlI+DQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUZXN0cyB3aGV0aGVyIGEgY2VydGFpbiBlbGVtZW50IG5hbWUgaXMga25vd24gd2l0aGluIHRoaXMgbmFtZXNwYWNlLjwvVEQ+DQo8L1RSPg0KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+DQo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+DQo8Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPg0KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUveGFsYW4vZXh0ZW5zaW9ucy9FeHRlbnNpb25IYW5kbGVySmF2YVBhY2thZ2UuaHRtbCNpc0Z1bmN0aW9uQXZhaWxhYmxlKGphdmEubGFuZy5TdHJpbmcpIj5pc0Z1bmN0aW9uQXZhaWxhYmxlPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2Z1bmN0aW9uKTwvQ09ERT4NCg0KPEJSPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGVzdHMgd2hldGhlciBhIGNlcnRhaW4gZnVuY3Rpb24gbmFtZSBpcyBrbm93biB3aXRoaW4gdGhpcyBuYW1lc3BhY2UuPC9URD4NCjwvVFI+DQo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4NCjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4NCjxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+DQo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS94YWxhbi9leHRlbnNpb25zL0V4dGVuc2lvbkhhbmRsZXJKYXZhUGFja2FnZS5odG1sI3Byb2Nlc3NFbGVtZW50KGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueGFsYW4udGVtcGxhdGVzLkVsZW1UZW1wbGF0ZUVsZW1lbnQsIG9yZy5hcGFjaGUueGFsYW4udHJhbnNmb3JtZXIuVHJhbnNmb3JtZXJJbXBsLCBvcmcuYXBhY2hlLnhhbGFuLnRlbXBsYXRlcy5TdHlsZXNoZWV0LCBqYXZhLmxhbmcuT2JqZWN0KSI+cHJvY2Vzc0VsZW1lbnQ8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bG9jYWxQYXJ0LAogICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3hhbGFuL3RlbXBsYXRlcy9FbGVtVGVtcGxhdGVFbGVtZW50Lmh0bWwiPkVsZW1UZW1wbGF0ZUVsZW1lbnQ8L0E+Jm5ic3A7ZWxlbWVudCwKICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS94YWxhbi90cmFuc2Zvcm1lci9UcmFuc2Zvcm1lckltcGwuaHRtbCI+VHJhbnNmb3JtZXJJbXBsPC9BPiZuYnNwO3RyYW5zZm9ybWVyLAogICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3hhbGFuL3RlbXBsYXRlcy9TdHlsZXNoZWV0Lmh0bWwiPlN0eWxlc2hlZXQ8L0E+Jm5ic3A7c3R5bGVzaGVldFRyZWUsCiAgICAgICAgICAgICAgIGphdmEubGFuZy5PYmplY3QmbmJzcDttZXRob2RLZXkpPC9DT0RFPg0KDQo8QlI+DQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQcm9jZXNzIGEgY2FsbCB0byB0aGlzIGV4dGVuc2lvbiBuYW1lc3BhY2UgdmlhIGFuIGVsZW1lbnQuPC9URD4NCjwvVFI+DQo8L1RBQkxFPg0KJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhhbGFuLmV4dGVuc2lvbnMuRXh0ZW5zaW9uSGFuZGxlckphdmEiPjwhLS0gLS0+PC9BPgo8VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4NCjxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPg0KPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54YWxhbi5leHRlbnNpb25zLjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUveGFsYW4vZXh0ZW5zaW9ucy9FeHRlbnNpb25IYW5kbGVySmF2YS5odG1sIj5FeHRlbnNpb25IYW5kbGVySmF2YTwvQT48L0I+PC9URD4NCjwvVFI+DQo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4NCjxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3hhbGFuL2V4dGVuc2lvbnMvRXh0ZW5zaW9uSGFuZGxlckphdmEuaHRtbCNnZXRGcm9tQ2FjaGUoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdFtdKSI+Z2V0RnJvbUNhY2hlPC9BPiwgDQo8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3hhbGFuL2V4dGVuc2lvbnMvRXh0ZW5zaW9uSGFuZGxlckphdmEuaHRtbCNwdXRUb0NhY2hlKGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3RbXSwgamF2YS5sYW5nLk9iamVjdCkiPnB1dFRvQ2FjaGU8L0E+PC9DT0RFPjwvVEQ+DQo8L1RSPg0KPC9UQUJMRT4NCiZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPg0KPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+DQo8VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuT2JqZWN0PC9CPjwvVEQ+DQo8L1RSPg0KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+DQo8VEQ+PENPREU+ZXF1YWxzLCANCmdldENsYXNzLCANCmhhc2hDb2RlLCANCm5vdGlmeSwgDQpub3RpZnlBbGwsIA0KdG9TdHJpbmcsIA0Kd2FpdCwgDQp3YWl0LCANCndhaXQ8L0NPREU+PC9URD4NCjwvVFI+DQo8L1RBQkxFPg0KJm5ic3A7DQo8UD4NCg0KPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPg0KDQoNCjwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4NCg0KPEEgTkFNRT0iY29uc3RydWN0b3JfZGV0YWlsIj48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+DQo8VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4NCjxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPg0KPEI+Q29uc3RydWN0b3IgRGV0YWlsPC9CPjwvRk9OVD48L1REPg0KPC9UUj4NCjwvVEFCTEU+DQoNCjxBIE5BTUU9IkV4dGVuc2lvbkhhbmRsZXJKYXZhUGFja2FnZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPg0KRXh0ZW5zaW9uSGFuZGxlckphdmFQYWNrYWdlPC9IMz4NCjxQUkU+DQpwdWJsaWMgPEI+RXh0ZW5zaW9uSGFuZGxlckphdmFQYWNrYWdlPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZXNwYWNlVXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDtzY3JpcHRMYW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDtjbGFzc05hbWUpPC9QUkU+DQo8REw+DQo8REQ+Q29uc3RydWN0IGEgbmV3IGV4dGVuc2lvbiBuYW1lc3BhY2UgaGFuZGxlciBnaXZlbiBhbGwgdGhlIGluZm9ybWF0aW9uCiBuZWVkZWQuPEREPjxETD4NCjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bmFtZXNwYWNlVXJpPC9DT0RFPiAtIHRoZSBleHRlbnNpb24gbmFtZXNwYWNlIFVSSSB0aGF0IEknbSBpbXBsZW1lbnRpbmc8REQ+PENPREU+c2NyaXB0TGFuZzwvQ09ERT4gLSBsYW5ndWFnZSBvZiBjb2RlIGltcGxlbWVudGluZyB0aGUgZXh0ZW5zaW9uPEREPjxDT0RFPmNsYXNzTmFtZTwvQ09ERT4gLSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBjbGFzcy4gIFRoaXMKICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IGEgZG90ICguKTwvREw+DQo8L0REPg0KPC9ETD4NCg0KPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPg0KDQo8QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+DQo8VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4NCjxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPg0KPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4NCjwvVFI+DQo8L1RBQkxFPg0KDQo8QSBOQU1FPSJpc0Z1bmN0aW9uQXZhaWxhYmxlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+DQppc0Z1bmN0aW9uQXZhaWxhYmxlPC9IMz4NCjxQUkU+DQpwdWJsaWMgYm9vbGVhbiA8Qj5pc0Z1bmN0aW9uQXZhaWxhYmxlPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7ZnVuY3Rpb24pPC9QUkU+DQo8REw+DQo8REQ+VGVzdHMgd2hldGhlciBhIGNlcnRhaW4gZnVuY3Rpb24gbmFtZSBpcyBrbm93biB3aXRoaW4gdGhpcyBuYW1lc3BhY2UuCiBTaW5jZSB0aGlzIGlzIGZvciBhIHBhY2thZ2UsIHdlIGNvbmNhdGVuYXRlIHRoZSBwYWNrYWdlIG5hbWUgdXNlZCB3aGVuCiB0aGlzIGhhbmRsZXIgd2FzIGNyZWF0ZWQgYW5kIHRoZSBmdW5jdGlvbiBuYW1lIHNwZWNpZmllZCBpbiB0aGUgYXJndW1lbnQuCiBUaGVyZSBpcwogbm8gaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBhcmd1bWVudHMgdG8gdGhlIGZ1bmN0aW9uIGNhbGwgb3IKIHdoZXRoZXIgdGhlIG1ldGhvZCBpbXBsZW1lbnRpbmcgdGhlIGZ1bmN0aW9uIGlzIGEgc3RhdGljIG1ldGhvZCBvcgogYW4gaW5zdGFuY2UgbWV0aG9kLjxERD48REw+DQo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmZ1bmN0aW9uPC9DT0RFPiAtIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIGJlaW5nIHRlc3RlZDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiBpdHMga25vd24sIGZhbHNlIGlmIG5vdC48RFQ+PEI+T3ZlcnJpZGVzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS94YWxhbi9leHRlbnNpb25zL0V4dGVuc2lvbkhhbmRsZXIuaHRtbCNpc0Z1bmN0aW9uQXZhaWxhYmxlKGphdmEubGFuZy5TdHJpbmcpIj5pc0Z1bmN0aW9uQXZhaWxhYmxlPC9BPiBpbiBjbGFzcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3hhbGFuL2V4dGVuc2lvbnMvRXh0ZW5zaW9uSGFuZGxlci5odG1sIj5FeHRlbnNpb25IYW5kbGVyPC9BPjwvREw+DQo8L0REPg0KPC9ETD4NCjxIUj4NCg0KPEEgTkFNRT0iaXNFbGVtZW50QXZhaWxhYmxlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+DQppc0VsZW1lbnRBdmFpbGFibGU8L0gzPg0KPFBSRT4NCnB1YmxpYyBib29sZWFuIDxCPmlzRWxlbWVudEF2YWlsYWJsZTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2VsZW1lbnQpPC9QUkU+DQo8REw+DQo8REQ+VGVzdHMgd2hldGhlciBhIGNlcnRhaW4gZWxlbWVudCBuYW1lIGlzIGtub3duIHdpdGhpbiB0aGlzIG5hbWVzcGFjZS4KIExvb2tzIGZvciBhIG1ldGhvZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBuYW1lIGFuZCBzaWduYXR1cmUuCiBUaGlzIG1ldGhvZCBleGFtaW5lcyBib3RoIHN0YXRpYyBhbmQgaW5zdGFuY2UgbWV0aG9kcy48REQ+PERMPg0KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5lbGVtZW50PC9DT0RFPiAtIG5hbWUgb2YgdGhlIGVsZW1lbnQgYmVpbmcgdGVzdGVkPERUPjxCPlJldHVybnM6PC9CPjxERD50cnVlIGlmIGl0cyBrbm93biwgZmFsc2UgaWYgbm90LjxEVD48Qj5PdmVycmlkZXM6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3hhbGFuL2V4dGVuc2lvbnMvRXh0ZW5zaW9uSGFuZGxlci5odG1sI2lzRWxlbWVudEF2YWlsYWJsZShqYXZhLmxhbmcuU3RyaW5nKSI+aXNFbGVtZW50QXZhaWxhYmxlPC9BPiBpbiBjbGFzcyA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3hhbGFuL2V4dGVuc2lvbnMvRXh0ZW5zaW9uSGFuZGxlci5odG1sIj5FeHRlbnNpb25IYW5kbGVyPC9BPjwvREw+DQo8L0REPg0KPC9ETD4NCjxIUj4NCg0KPEEgTkFNRT0iY2FsbEZ1bmN0aW9uKGphdmEubGFuZy5TdHJpbmcsIGphdmEudXRpbC5WZWN0b3IsIGphdmEubGFuZy5PYmplY3QsIG9yZy5hcGFjaGUueGFsYW4uZXh0ZW5zaW9ucy5FeHByZXNzaW9uQ29udGV4dCkiPjwhLS0gLS0+PC9BPjxIMz4NCmNhbGxGdW5jdGlvbjwvSDM+DQo8UFJFPg0KcHVibGljIGphdmEubGFuZy5PYmplY3QgPEI+Y2FsbEZ1bmN0aW9uPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7ZnVuY05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuVmVjdG9yJm5ic3A7YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5PYmplY3QmbmJzcDttZXRob2RLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3hhbGFuL2V4dGVuc2lvbnMvRXhwcmVzc2lvbkNvbnRleHQuaHRtbCI+RXhwcmVzc2lvbkNvbnRleHQ8L0E+Jm5ic3A7ZXhwckNvbnRleHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi8uLi9qYXZheC94bWwvdHJhbnNmb3JtL1RyYW5zZm9ybWVyRXhjZXB0aW9uLmh0bWwiPlRyYW5zZm9ybWVyRXhjZXB0aW9uPC9BPjwvUFJFPg0KPERMPg0KPEREPlByb2Nlc3MgYSBjYWxsIHRvIGEgZnVuY3Rpb24gaW4gdGhlIHBhY2thZ2UgamF2YSBuYW1lc3BhY2UuCiBUaGVyZSBhcmUgdGhyZWUgcG9zc2libGUgdHlwZXMgb2YgY2FsbHM6CiA8cHJlPgogICBDb25zdHJ1Y3RvcjoKICAgICBwYWNrYWdlbnM6Y2xhc3MubmFtZS5uZXcoYXJnMSwgYXJnMiwgLi4uKQoKICAgU3RhdGljIG1ldGhvZDoKICAgICBwYWNrYWdlbnM6Y2xhc3MubmFtZS5tZXRob2QoYXJnMSwgYXJnMiwgLi4uKQoKICAgSW5zdGFuY2UgbWV0aG9kOgogICAgIHBhY2thZ2VuczptZXRob2Qob2JqLCBhcmcxLCBhcmcyLCAuLi4pCiA8L3ByZT4KIFdlIHVzZSB0aGUgZm9sbG93aW5nIHJ1bGVzIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiBjYWxsIG1hZGU6CiA8b2wgdHlwZT0iMSI+CiA8bGk+SWYgdGhlIGZ1bmN0aW9uIG5hbWUgZW5kcyB3aXRoIGEgIi5uZXciLCBjYWxsIHRoZSBiZXN0IGNvbnN0cnVjdG9yIGZvcgogICAgIGNsYXNzIHdob3NlIG5hbWUgaXMgZm9ybWVkIGJ5IGNvbmNhdGVuYXRpbmcgdGhlIHZhbHVlIHNwZWNpZmllZCBvbgogICAgIHRoZSBuYW1lc3BhY2Ugd2l0aCB0aGUgdmFsdWUgc3BlY2lmaWVkIGluIHRoZSBmdW5jdGlvbiBpbnZvY2F0aW9uCiAgICAgYmVmb3JlICIubmV3Ii48L2xpPgogPGxpPklmIHRoZSBmdW5jdGlvbiBuYW1lIGNvbnRhaW5zIGEgcGVyaW9kLCBjYWxsIHRoZSBiZXN0IHN0YXRpYyBtZXRob2QgIm1ldGhvZCIKICAgICBpbiB0aGUgY2xhc3Mgd2hvc2UgbmFtZSBpcyBmb3JtZWQgYnkgY29uY2F0ZW5hdGluZyB0aGUgdmFsdWUgc3BlY2lmaWVkIG9uCiAgICAgdGhlIG5hbWVzcGFjZSB3aXRoIHRoZSB2YWx1ZSBzcGVjaWZpZWQgaW4gdGhlIGZ1bmN0aW9uIGludm9jYXRpb24uPC9saT4KIDxsaT5PdGhlcndpc2UsIGNhbGwgdGhlIGJlc3QgaW5zdGFuY2UgbWV0aG9kICJtZXRob2QiCiAgICAgaW4gdGhlIGNsYXNzIHdob3NlIG5hbWUgaXMgZm9ybWVkIGJ5IGNvbmNhdGVuYXRpbmcgdGhlIHZhbHVlIHNwZWNpZmllZCBvbgogICAgIHRoZSBuYW1lc3BhY2Ugd2l0aCB0aGUgdmFsdWUgc3BlY2lmaWVkIGluIHRoZSBmdW5jdGlvbiBpbnZvY2F0aW9uLgogICAgIE5vdGUgdGhhdCBhIHN0YXRpYyBtZXRob2Qgb2YgdGhlIHNhbWUKICAgICBuYW1lIHdpbGwgPGk+bm90PC9pPiBiZSBjYWxsZWQgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uICBUaGlzCiAgICAgbW9kdWxlIGRvZXMgbm90IHZlcmlmeSB0aGF0IHRoZSBvYmogYXJndW1lbnQgaXMgYSBtZW1iZXIgb2YgdGhlCiAgICAgcGFja2FnZSBuYW1lc3BhY2UuPC9saT4KIDwvb2w+PEREPjxETD4NCjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZnVuY05hbWU8L0NPREU+IC0gRnVuY3Rpb24gbmFtZS48REQ+PENPREU+YXJnczwvQ09ERT4gLSBUaGUgYXJndW1lbnRzIG9mIHRoZSBmdW5jdGlvbiBjYWxsLjxERD48Q09ERT5tZXRob2RLZXk8L0NPREU+IC0gQSBrZXkgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MgYW5kIG1ldGhvZCBjYWxsLjxERD48Q09ERT5leHByQ29udGV4dDwvQ09ERT4gLSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGlzIGV4cHJlc3Npb24gaXMgYmVpbmcgZXhlY3V0ZWQuPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBldmFsdWF0aW9uLjxEVD48Qj5UaHJvd3M6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9qYXZheC94bWwvdHJhbnNmb3JtL1RyYW5zZm9ybWVyRXhjZXB0aW9uLmh0bWwiPlRyYW5zZm9ybWVyRXhjZXB0aW9uPC9BPiAtIGlmIHBhcnNpbmcgdHJvdWJsZTxEVD48Qj5PdmVycmlkZXM6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3hhbGFuL2V4dGVuc2lvbnMvRXh0ZW5zaW9uSGFuZGxlci5odG1sI2NhbGxGdW5jdGlvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLnV0aWwuVmVjdG9yLCBqYXZhLmxhbmcuT2JqZWN0LCBvcmcuYXBhY2hlLnhhbGFuLmV4dGVuc2lvbnMuRXhwcmVzc2lvbkNvbnRleHQpIj5jYWxsRnVuY3Rpb248L0E+IGluIGNsYXNzIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUveGFsYW4vZXh0ZW5zaW9ucy9FeHRlbnNpb25IYW5kbGVyLmh0bWwiPkV4dGVuc2lvbkhhbmRsZXI8L0E+PC9ETD4NCjwvREQ+DQo8L0RMPg0KPEhSPg0KDQo8QSBOQU1FPSJjYWxsRnVuY3Rpb24ob3JnLmFwYWNoZS54cGF0aC5mdW5jdGlvbnMuRnVuY0V4dEZ1bmN0aW9uLCBqYXZhLnV0aWwuVmVjdG9yLCBvcmcuYXBhY2hlLnhhbGFuLmV4dGVuc2lvbnMuRXhwcmVzc2lvbkNvbnRleHQpIj48IS0tIC0tPjwvQT48SDM+DQpjYWxsRnVuY3Rpb248L0gzPg0KPFBSRT4NCnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxCPmNhbGxGdW5jdGlvbjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS94cGF0aC9mdW5jdGlvbnMvRnVuY0V4dEZ1bmN0aW9uLmh0bWwiPkZ1bmNFeHRGdW5jdGlvbjwvQT4mbmJzcDtleHRGdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5WZWN0b3ImbmJzcDthcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS94YWxhbi9leHRlbnNpb25zL0V4cHJlc3Npb25Db250ZXh0Lmh0bWwiPkV4cHJlc3Npb25Db250ZXh0PC9BPiZuYnNwO2V4cHJDb250ZXh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vLi4vamF2YXgveG1sL3RyYW5zZm9ybS9UcmFuc2Zvcm1lckV4Y2VwdGlvbi5odG1sIj5UcmFuc2Zvcm1lckV4Y2VwdGlvbjwvQT48L1BSRT4NCjxETD4NCjxERD5Qcm9jZXNzIGEgY2FsbCB0byBhbiBYUGF0aCBleHRlbnNpb24gZnVuY3Rpb248REQ+PERMPg0KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5leHRGdW5jdGlvbjwvQ09ERT4gLSBUaGUgWFBhdGggZXh0ZW5zaW9uIGZ1bmN0aW9uPEREPjxDT0RFPmFyZ3M8L0NPREU+IC0gVGhlIGFyZ3VtZW50cyBvZiB0aGUgZnVuY3Rpb24gY2FsbC48REQ+PENPREU+ZXhwckNvbnRleHQ8L0NPREU+IC0gVGhlIGNvbnRleHQgaW4gd2hpY2ggdGhpcyBleHByZXNzaW9uIGlzIGJlaW5nIGV4ZWN1dGVkLjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gZXZhbHVhdGlvbi48RFQ+PEI+VGhyb3dzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vamF2YXgveG1sL3RyYW5zZm9ybS9UcmFuc2Zvcm1lckV4Y2VwdGlvbi5odG1sIj5UcmFuc2Zvcm1lckV4Y2VwdGlvbjwvQT4gLSAmbmJzcDs8RFQ+PEI+T3ZlcnJpZGVzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS94YWxhbi9leHRlbnNpb25zL0V4dGVuc2lvbkhhbmRsZXIuaHRtbCNjYWxsRnVuY3Rpb24ob3JnLmFwYWNoZS54cGF0aC5mdW5jdGlvbnMuRnVuY0V4dEZ1bmN0aW9uLCBqYXZhLnV0aWwuVmVjdG9yLCBvcmcuYXBhY2hlLnhhbGFuLmV4dGVuc2lvbnMuRXhwcmVzc2lvbkNvbnRleHQpIj5jYWxsRnVuY3Rpb248L0E+IGluIGNsYXNzIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUveGFsYW4vZXh0ZW5zaW9ucy9FeHRlbnNpb25IYW5kbGVyLmh0bWwiPkV4dGVuc2lvbkhhbmRsZXI8L0E+PC9ETD4NCjwvREQ+DQo8L0RMPg0KPEhSPg0KDQo8QSBOQU1FPSJwcm9jZXNzRWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhhbGFuLnRlbXBsYXRlcy5FbGVtVGVtcGxhdGVFbGVtZW50LCBvcmcuYXBhY2hlLnhhbGFuLnRyYW5zZm9ybWVyLlRyYW5zZm9ybWVySW1wbCwgb3JnLmFwYWNoZS54YWxhbi50ZW1wbGF0ZXMuU3R5bGVzaGVldCwgamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4NCnByb2Nlc3NFbGVtZW50PC9IMz4NCjxQUkU+DQpwdWJsaWMgdm9pZCA8Qj5wcm9jZXNzRWxlbWVudDwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2xvY2FsUGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS94YWxhbi90ZW1wbGF0ZXMvRWxlbVRlbXBsYXRlRWxlbWVudC5odG1sIj5FbGVtVGVtcGxhdGVFbGVtZW50PC9BPiZuYnNwO2VsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUveGFsYW4vdHJhbnNmb3JtZXIvVHJhbnNmb3JtZXJJbXBsLmh0bWwiPlRyYW5zZm9ybWVySW1wbDwvQT4mbmJzcDt0cmFuc2Zvcm1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS94YWxhbi90ZW1wbGF0ZXMvU3R5bGVzaGVldC5odG1sIj5TdHlsZXNoZWV0PC9BPiZuYnNwO3N0eWxlc2hlZXRUcmVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuT2JqZWN0Jm5ic3A7bWV0aG9kS2V5KQogICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi8uLi9qYXZheC94bWwvdHJhbnNmb3JtL1RyYW5zZm9ybWVyRXhjZXB0aW9uLmh0bWwiPlRyYW5zZm9ybWVyRXhjZXB0aW9uPC9BPiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5pby5JT0V4Y2VwdGlvbjwvUFJFPg0KPERMPg0KPEREPlByb2Nlc3MgYSBjYWxsIHRvIHRoaXMgZXh0ZW5zaW9uIG5hbWVzcGFjZSB2aWEgYW4gZWxlbWVudC4gQXMgYSBzaWRlCiBlZmZlY3QsIHRoZSByZXN1bHRzIGFyZSBzZW50IHRvIHRoZSBUcmFuc2Zvcm1lckltcGwncyByZXN1bHQgdHJlZS4KIEZvciB0aGlzIG5hbWVzcGFjZSwgb25seSBzdGF0aWMgZWxlbWVudCBtZXRob2RzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLgogSWYgaW5zdGFuY2UgbWV0aG9kcyBhcmUgbmVlZGVkLCBwbGVhc2UgbGV0IHVzIGtub3cgeW91ciByZXF1aXJlbWVudHMuPEREPjxETD4NCjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bG9jYWxQYXJ0PC9DT0RFPiAtIEVsZW1lbnQgbmFtZSdzIGxvY2FsIHBhcnQuPEREPjxDT0RFPmVsZW1lbnQ8L0NPREU+IC0gVGhlIGV4dGVuc2lvbiBlbGVtZW50IGJlaW5nIHByb2Nlc3NlZC48REQ+PENPREU+dHJhbnNmb3JtZXI8L0NPREU+IC0gSGFuZGxlIHRvIFRyYW5zZm9ybWVySW1wbC48REQ+PENPREU+c3R5bGVzaGVldFRyZWU8L0NPREU+IC0gVGhlIGNvbXBpbGVkIHN0eWxlc2hlZXQgdHJlZS48REQ+PENPREU+bWV0aG9kS2V5PC9DT0RFPiAtIEEga2V5IHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGVsZW1lbnQgY2FsbC48RFQ+PEI+VGhyb3dzOjwvQj48REQ+amF2YS5pby5JT0V4Y2VwdGlvbiAtIGlmIGxvYWRpbmcgdHJvdWJsZTxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9qYXZheC94bWwvdHJhbnNmb3JtL1RyYW5zZm9ybWVyRXhjZXB0aW9uLmh0bWwiPlRyYW5zZm9ybWVyRXhjZXB0aW9uPC9BPiAtIGlmIHBhcnNpbmcgdHJvdWJsZTxEVD48Qj5PdmVycmlkZXM6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3hhbGFuL2V4dGVuc2lvbnMvRXh0ZW5zaW9uSGFuZGxlci5odG1sI3Byb2Nlc3NFbGVtZW50KGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueGFsYW4udGVtcGxhdGVzLkVsZW1UZW1wbGF0ZUVsZW1lbnQsIG9yZy5hcGFjaGUueGFsYW4udHJhbnNmb3JtZXIuVHJhbnNmb3JtZXJJbXBsLCBvcmcuYXBhY2hlLnhhbGFuLnRlbXBsYXRlcy5TdHlsZXNoZWV0LCBqYXZhLmxhbmcuT2JqZWN0KSI+cHJvY2Vzc0VsZW1lbnQ8L0E+IGluIGNsYXNzIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUveGFsYW4vZXh0ZW5zaW9ucy9FeHRlbnNpb25IYW5kbGVyLmh0bWwiPkV4dGVuc2lvbkhhbmRsZXI8L0E+PC9ETD4NCjwvREQ+DQo8L0RMPg0KPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPg0KPEhSPg0KDQo8IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+DQo8QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+DQo8VFI+DQo8VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+DQo8QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4NCiAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4NCiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+DQogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4NCiAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+DQogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvRXh0ZW5zaW9uSGFuZGxlckphdmFQYWNrYWdlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VXNlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4NCiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPg0KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+DQogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+DQogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPg0KICA8L1RSPg0KPC9UQUJMRT4NCjwvVEQ+DQo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4NCjwvRU0+DQo8L1REPg0KPC9UUj4NCg0KPFRSPg0KPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4NCiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUveGFsYW4vZXh0ZW5zaW9ucy9FeHRlbnNpb25IYW5kbGVySmF2YUNsYXNzLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOw0KJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS94YWxhbi9leHRlbnNpb25zL0V4dGVuc2lvbk5hbWVzcGFjZUNvbnRleHQuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+DQo8VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPg0KICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsNCiZuYnNwOzxBIEhSRUY9IkV4dGVuc2lvbkhhbmRsZXJKYXZhUGFja2FnZS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+PC9GT05UPjwvVEQ+DQo8L1RSPg0KPFRSPg0KPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4NCiAgU1VNTUFSWTogJm5ic3A7SU5ORVImbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+DQo8VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPg0KREVUQUlMOiAmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+DQo8L1RSPg0KPC9UQUJMRT4NCjwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4NCg0KPEhSPg0KQ29weXJpZ2h0IKkgMjAwNiBBcGFjaGUgWE1MIFByb2plY3QuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQo8L0JPRFk+DQo8L0hUTUw+DQo=