ZGlmZiAtLWdpdCBhL2NvcmUvTWFrZWZpbGUgYi9jb3JlL01ha2VmaWxlCmluZGV4IDdmMGU0MTIuLjVhN2RkZDIgMTAwNjQ0Ci0tLSBhL2NvcmUvTWFrZWZpbGUKKysrIGIvY29yZS9NYWtlZmlsZQpAQCAtMjM5OCw3ICsyMzk4LDcgQEAKICQoaGlkZSkgZWNobyAicm9vdF9kaXI9JChUQVJHRVRfUk9PVF9PVVQpIiA+PiAkKDEpCiAkKGlmICQoZmlsdGVyIHRydWUsJChQUk9EVUNUX1VTRV9EWU5BTUlDX1BBUlRJVElPTl9TSVpFKSksXAogICAgICQoaGlkZSkgZWNobyAidXNlX2R5bmFtaWNfcGFydGl0aW9uX3NpemU9dHJ1ZSIgPj4gJCgxKSkKLSQoaWYgJChDT1BZX0lNQUdFU19GT1JfVEFSR0VUX0ZJTEVTX1pJUCksXAorJChpZiAkKFVTRV9GSVhFRF9USU1FU1RBTVBfSU1HX0ZJTEVTKSQoQ09QWV9JTUFHRVNfRk9SX1RBUkdFVF9GSUxFU19aSVApLFwKICAgICAkKGhpZGUpIGVjaG8gInVzZV9maXhlZF90aW1lc3RhbXA9dHJ1ZSIgPj4gJCgxKSkKICQoaWYgJCgzKSwkKGhpZGUpICQoZm9yZWFjaCBrdiwkKDMpLGVjaG8gIiQoa3YpIiA+PiAkKDEpOykpCiAkKGhpZGUpIHNvcnQgLW8gJCgxKSAkKDEpCmRpZmYgLS1naXQgYS9jb3JlL21haW4ubWsgYi9jb3JlL21haW4ubWsKaW5kZXggNjI0ZGY0OS4uMjU1ODBlMiAxMDA2NDQKLS0tIGEvY29yZS9tYWluLm1rCisrKyBiL2NvcmUvbWFpbi5tawpAQCAtMTc1OSwxMCArMTc1OSw2IEBACiAJQGVjaG8gJChzb3J0ICQocGF0c3Vic3QgJChQUk9EVUNUX09VVCkvJSwlLCQoZmlsdGVyICQoUFJPRFVDVF9PVVQpLyUsJChtb2R1bGVzX3RvX2luc3RhbGwpKSkpIHwgdHIgLXMgJyAnICdcbicKIAlAZWNobyBTdWNjZXNzZnVsbHkgZHVtcGVkIHByb2R1Y3QgdGFyZ2V0IGZpbGUgbGlzdC4KIAotLlBIT05ZOiBub3RoaW5nCi1ub3RoaW5nOgotCUBlY2hvIFN1Y2Nlc3NmdWxseSByZWFkIHRoZSBtYWtlZmlsZXMuCi0KIC5QSE9OWTogdGlkeV9vbmx5CiB0aWR5X29ubHk6CiAJQGVjaG8gU3VjY2Vzc2Z1bGx5IG1ha2UgdGlkeV9vbmx5LgpkaWZmIC0tZ2l0IGEvY29yZS90YXNrcy9nZW5lcmFsLXRlc3RzLXNoYXJlZC1saWJzLm1rIGIvY29yZS90YXNrcy9nZW5lcmFsLXRlc3RzLXNoYXJlZC1saWJzLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDA1MTQwLi4wMDAwMDAwCi0tLSBhL2NvcmUvdGFza3MvZ2VuZXJhbC10ZXN0cy1zaGFyZWQtbGlicy5taworKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS5QSE9OWTogZ2VuZXJhbC10ZXN0cy1zaGFyZWQtbGlicwotCi1pbnRlcm1lZGlhdGVzX2RpciA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLFBBQ0tBR0lORyxnZW5lcmFsLXRlc3RzLXNoYXJlZC1saWJzKQotCi1nZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJzX3ppcCA6PSAkKFBST0RVQ1RfT1VUKS9nZW5lcmFsLXRlc3RzX2hvc3Qtc2hhcmVkLWxpYnMuemlwCi0KLSMgRmlsdGVyIHNoYXJlZCBlbnRyaWVzIGJldHdlZW4gZ2VuZXJhbC10ZXN0cyBhbmQgZGV2aWNlLXRlc3RzJ3MgSE9TVF9TSEFSRURfTElCUkFSWS5GSUxFUywKLSMgdG8gYXZvaWQgd2FybmluZyBhYm91dCBvdmVycmlkaW5nIGNvbW1hbmRzLgotbXlfaG9zdF9zaGFyZWRfbGliX2Zvcl9nZW5lcmFsX3Rlc3RzIDo9IFwKLSAgJChmb3JlYWNoIG0sJChmaWx0ZXIgJChDT01QQVRJQklMSVRZLmRldmljZS10ZXN0cy5IT1NUX1NIQVJFRF9MSUJSQVJZLkZJTEVTKSxcCi0JICAgJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuSE9TVF9TSEFSRURfTElCUkFSWS5GSUxFUykpLCQoY2FsbCB3b3JkLWNvbG9uLDIsJChtKSkpCi1teV9nZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJfZmlsZXMgOj0gXAotICAkKGZpbHRlci1vdXQgJChDT01QQVRJQklMSVRZLmRldmljZS10ZXN0cy5IT1NUX1NIQVJFRF9MSUJSQVJZLkZJTEVTKSxcCi0JICQoQ09NUEFUSUJJTElUWS5nZW5lcmFsLXRlc3RzLkhPU1RfU0hBUkVEX0xJQlJBUlkuRklMRVMpKQotCi1teV9ob3N0X3NoYXJlZF9saWJfZm9yX2dlbmVyYWxfdGVzdHMgKz0gJChjYWxsIGNvcHktbWFueS1maWxlcywkKG15X2dlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYl9maWxlcykpCi0KLSQoZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXApIDogUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUiA6PSAkKGludGVybWVkaWF0ZXNfZGlyKQotJChnZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJzX3ppcCkgOiBQUklWQVRFX0hPU1RfU0hBUkVEX0xJQlMgOj0gJChteV9ob3N0X3NoYXJlZF9saWJfZm9yX2dlbmVyYWxfdGVzdHMpCi0kKGdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwKSA6IFBSSVZBVEVfZ2VuZXJhbF9ob3N0X3NoYXJlZF9saWJzX3ppcCA6PSAkKGdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwKQotJChnZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJzX3ppcCkgOiAkKG15X2hvc3Rfc2hhcmVkX2xpYl9mb3JfZ2VuZXJhbF90ZXN0cykgJChTT09OR19aSVApCi0Jcm0gLXJmICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikKLQlta2RpciAtcCAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvdG9vbHMKLQkkKGhpZGUpIGZvciBzaGFyZWRfbGliIGluICQoUFJJVkFURV9IT1NUX1NIQVJFRF9MSUJTKTsgZG8gXAotCSAgZWNobyAkJHNoYXJlZF9saWIgPj4gJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9zaGFyZWQtbGlicy5saXN0OyBcCi0JZG9uZQotCWdyZXAgJChIT1NUX09VVF9URVNUQ0FTRVMpICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvc2hhcmVkLWxpYnMubGlzdCA+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvaG9zdC1zaGFyZWQtbGlicy5saXN0IHx8IHRydWUKLQkkKFNPT05HX1pJUCkgLWQgLW8gJChQUklWQVRFX2dlbmVyYWxfaG9zdF9zaGFyZWRfbGlic196aXApIFwKLQkgIC1QIGhvc3QgLUMgJChIT1NUX09VVCkgLWwgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9ob3N0LXNoYXJlZC1saWJzLmxpc3QKLQotZ2VuZXJhbC10ZXN0cy1zaGFyZWQtbGliczogJChnZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJzX3ppcCkKLSQoY2FsbCBkaXN0LWZvci1nb2FscywgZ2VuZXJhbC10ZXN0cy1zaGFyZWQtbGlicywgJChnZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJzX3ppcCkpCi0KLSQoY2FsbCBkZWNsYXJlLTFwLWNvbnRhaW5lciwkKGdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwKSwpCi0kKGNhbGwgZGVjbGFyZS1jb250YWluZXItbGljZW5zZS1kZXBzLCQoZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXApLCQobXlfaG9zdF9zaGFyZWRfbGliX2Zvcl9nZW5lcmFsX3Rlc3RzKSwkKFBST0RVQ1RfT1VUKS86LykKLQotaW50ZXJtZWRpYXRlc19kaXIgOj0KLWdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwIDo9CmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL2dlbmVyYWwtdGVzdHMubWsgYi9jb3JlL3Rhc2tzL2dlbmVyYWwtdGVzdHMubWsKaW5kZXggMTkwMWVkNS4uZGNmY2ZhZCAxMDA2NDQKLS0tIGEvY29yZS90YXNrcy9nZW5lcmFsLXRlc3RzLm1rCisrKyBiL2NvcmUvdGFza3MvZ2VuZXJhbC10ZXN0cy5tawpAQCAtMjcsMTkgKzI3LDYxIEBACiAjIENyZWF0ZSBhbiBhcnRpZmFjdCB0byBpbmNsdWRlIGFsbCB0ZXN0IGNvbmZpZyBmaWxlcyBpbiBnZW5lcmFsLXRlc3RzLgogZ2VuZXJhbF90ZXN0c19jb25maWdzX3ppcCA6PSAkKFBST0RVQ1RfT1VUKS9nZW5lcmFsLXRlc3RzX2NvbmZpZ3MuemlwCiAKLWdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwIDo9ICQoUFJPRFVDVF9PVVQpL2dlbmVyYWwtdGVzdHNfaG9zdC1zaGFyZWQtbGlicy56aXAKKyMgRmlsdGVyIHNoYXJlZCBlbnRyaWVzIGJldHdlZW4gZ2VuZXJhbC10ZXN0cyBhbmQgZGV2aWNlLXRlc3RzJ3MgSE9TVF9TSEFSRURfTElCUkFSWS5GSUxFUywKKyMgdG8gYXZvaWQgd2FybmluZyBhYm91dCBvdmVycmlkaW5nIGNvbW1hbmRzLgorbXlfaG9zdF9zaGFyZWRfbGliX2Zvcl9nZW5lcmFsX3Rlc3RzIDo9IFwKKyAgJChmb3JlYWNoIG0sJChmaWx0ZXIgJChDT01QQVRJQklMSVRZLmRldmljZS10ZXN0cy5IT1NUX1NIQVJFRF9MSUJSQVJZLkZJTEVTKSxcCisJICAgJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuSE9TVF9TSEFSRURfTElCUkFSWS5GSUxFUykpLCQoY2FsbCB3b3JkLWNvbG9uLDIsJChtKSkpCitteV9nZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJfZmlsZXMgOj0gXAorICAkKGZpbHRlci1vdXQgJChDT01QQVRJQklMSVRZLmRldmljZS10ZXN0cy5IT1NUX1NIQVJFRF9MSUJSQVJZLkZJTEVTKSxcCisJICQoQ09NUEFUSUJJTElUWS5nZW5lcmFsLXRlc3RzLkhPU1RfU0hBUkVEX0xJQlJBUlkuRklMRVMpKQogCi0kKGdlbmVyYWxfdGVzdHNfemlwKSA6ICQoZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXApCitteV9ob3N0X3NoYXJlZF9saWJfZm9yX2dlbmVyYWxfdGVzdHMgKz0gJChjYWxsIGNvcHktbWFueS1maWxlcywkKG15X2dlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYl9maWxlcykpCisKK215X2hvc3Rfc2hhcmVkX2xpYl9zeW1saW5rcyA6PSBcCisgICAgJChmaWx0ZXIgJChDT01QQVRJQklMSVRZLmhvc3QtdW5pdC10ZXN0cy5TWU1MSU5LUyksXAorCSQoQ09NUEFUSUJJTElUWS5nZW5lcmFsLXRlc3RzLlNZTUxJTktTKSkKKworbXlfZ2VuZXJhbF90ZXN0c19zeW1saW5rcyA6PSBcCisgICAgJChmaWx0ZXItb3V0ICQoQ09NUEFUSUJJTElUWS5jYW1lcmEtaGFsLXRlc3RzLlNZTUxJTktTKSxcCisgICAgJChmaWx0ZXItb3V0ICQoQ09NUEFUSUJJTElUWS5ob3N0LXVuaXQtdGVzdHMuU1lNTElOS1MpLFwKKwkgJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuU1lNTElOS1MpKSkKKworbXlfc3ltbGlua3NfZm9yX2dlbmVyYWxfdGVzdHMgOj0gJChmb3JlYWNoIGYsJChteV9nZW5lcmFsX3Rlc3RzX3N5bWxpbmtzKSxcCisJJChzdHJpcCAkKGV2YWwgX2NtZl90dXBsZSA6PSAkKHN1YnN0IDosICwkKGYpKSkgXAorCSQoZXZhbCBfY21mX2RlcCA6PSAkKHdvcmQgMSwkKF9jbWZfdHVwbGUpKSkgXAorCSQoZXZhbCBfY21mX3NyYyA6PSAkKHdvcmQgMiwkKF9jbWZfdHVwbGUpKSkgXAorCSQoZXZhbCBfY21mX2Rlc3QgOj0gJCh3b3JkIDMsJChfY21mX3R1cGxlKSkpIFwKKwkkKGNhbGwgc3ltbGluay1maWxlLCQoX2NtZl9kZXApLCQoX2NtZl9zcmMpLCQoX2NtZl9kZXN0KSkgXAorCSQoX2NtZl9kZXN0KSkpCisKKyMgSW4gdGhpcyBvbmUgZGlyZWN0bHkgdGFrZSB0aGUgb3ZlcmxhcCBpbnRvIHRoZSB6aXAgc2luY2Ugd2UgY2FuJ3QgcmV3cml0ZSBydWxlcworbXlfc3ltbGlua3NfZm9yX2dlbmVyYWxfdGVzdHMgKz0gJChmb3JlYWNoIGYsJChteV9ob3N0X3NoYXJlZF9saWJfc3ltbGlua3MpLFwKKyAgICAgICAgJChzdHJpcCAkKGV2YWwgX2NtZl90dXBsZSA6PSAkKHN1YnN0IDosICwkKGYpKSkgXAorICAgICAgICAkKGV2YWwgX2NtZl9kZXAgOj0gJCh3b3JkIDEsJChfY21mX3R1cGxlKSkpIFwKKyAgICAgICAgJChldmFsIF9jbWZfc3JjIDo9ICQod29yZCAyLCQoX2NtZl90dXBsZSkpKSBcCisgICAgICAgICQoZXZhbCBfY21mX2Rlc3QgOj0gJCh3b3JkIDMsJChfY21mX3R1cGxlKSkpIFwKKyAgICAgICAgJChfY21mX2Rlc3QpKSkKKwogJChnZW5lcmFsX3Rlc3RzX3ppcCkgOiBQUklWQVRFX2dlbmVyYWxfdGVzdHNfbGlzdF96aXAgOj0gJChnZW5lcmFsX3Rlc3RzX2xpc3RfemlwKQogJChnZW5lcmFsX3Rlc3RzX3ppcCkgOiAuS0FUSV9JTVBMSUNJVF9PVVRQVVRTIDo9ICQoZ2VuZXJhbF90ZXN0c19saXN0X3ppcCkgJChnZW5lcmFsX3Rlc3RzX2NvbmZpZ3NfemlwKQogJChnZW5lcmFsX3Rlc3RzX3ppcCkgOiBQUklWQVRFX1RPT0xTIDo9ICQoZ2VuZXJhbF90ZXN0c190b29scykKICQoZ2VuZXJhbF90ZXN0c196aXApIDogUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUiA6PSAkKGludGVybWVkaWF0ZXNfZGlyKQorJChnZW5lcmFsX3Rlc3RzX3ppcCkgOiBQUklWQVRFX0hPU1RfU0hBUkVEX0xJQlMgOj0gJChteV9ob3N0X3NoYXJlZF9saWJfZm9yX2dlbmVyYWxfdGVzdHMpCiskKGdlbmVyYWxfdGVzdHNfemlwKSA6IFBSSVZBVEVfU1lNTElOS1MgOj0gJChteV9zeW1saW5rc19mb3JfZ2VuZXJhbF90ZXN0cykKICQoZ2VuZXJhbF90ZXN0c196aXApIDogUFJJVkFURV9nZW5lcmFsX3Rlc3RzX2NvbmZpZ3NfemlwIDo9ICQoZ2VuZXJhbF90ZXN0c19jb25maWdzX3ppcCkKLSQoZ2VuZXJhbF90ZXN0c196aXApIDogJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuRklMRVMpICQoQ09NUEFUSUJJTElUWS5nZW5lcmFsLXRlc3RzLlNPT05HX0lOU1RBTExFRF9DT01QQVRJQklMSVRZX1NVUFBPUlRfRklMRVMpICQoZ2VuZXJhbF90ZXN0c190b29scykgJChTT09OR19aSVApCiskKGdlbmVyYWxfdGVzdHNfemlwKSA6ICQoQ09NUEFUSUJJTElUWS5nZW5lcmFsLXRlc3RzLkZJTEVTKSAkKG15X2hvc3Rfc2hhcmVkX2xpYl9mb3JfZ2VuZXJhbF90ZXN0cykgJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuU09PTkdfSU5TVEFMTEVEX0NPTVBBVElCSUxJVFlfU1VQUE9SVF9GSUxFUykgJChnZW5lcmFsX3Rlc3RzX3Rvb2xzKSAkKG15X3N5bWxpbmtzX2Zvcl9nZW5lcmFsX3Rlc3RzKSAkKFNPT05HX1pJUCkKIAlybSAtcmYgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKQogCXJtIC1mICRAICQoUFJJVkFURV9nZW5lcmFsX3Rlc3RzX2xpc3RfemlwKQogCW1rZGlyIC1wICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS90b29scwogCWVjaG8gJChzb3J0ICQoQ09NUEFUSUJJTElUWS5nZW5lcmFsLXRlc3RzLkZJTEVTKSAkKENPTVBBVElCSUxJVFkuZ2VuZXJhbC10ZXN0cy5TT09OR19JTlNUQUxMRURfQ09NUEFUSUJJTElUWV9TVVBQT1JUX0ZJTEVTKSkgfCB0ciAiICIgIlxuIiA+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvbGlzdAorCWZvciBzeW1saW5rIGluICQoUFJJVkFURV9TWU1MSU5LUyk7IGRvIFwKKwkgIGVjaG8gJCRzeW1saW5rID4+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvbGlzdDsgXAorCWRvbmUKKwkkKGhpZGUpIGZvciBzaGFyZWRfbGliIGluICQoUFJJVkFURV9IT1NUX1NIQVJFRF9MSUJTKTsgZG8gXAorCSAgZWNobyAkJHNoYXJlZF9saWIgPj4gJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9zaGFyZWQtbGlicy5saXN0OyBcCisJZG9uZQorCWdyZXAgJChIT1NUX09VVF9URVNUQ0FTRVMpICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvc2hhcmVkLWxpYnMubGlzdCA+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvaG9zdC1zaGFyZWQtbGlicy5saXN0IHx8IHRydWUKIAlncmVwICQoSE9TVF9PVVRfVEVTVENBU0VTKSAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2xpc3QgPiAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2hvc3QubGlzdCB8fCB0cnVlCiAJZ3JlcCAkKFRBUkdFVF9PVVRfVEVTVENBU0VTKSAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2xpc3QgPiAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL3RhcmdldC5saXN0IHx8IHRydWUKIAlncmVwIC1lIC4qXFwuY29uZmlnJCQgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9ob3N0Lmxpc3QgPiAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2hvc3QtdGVzdC1jb25maWdzLmxpc3QgfHwgdHJ1ZQpAQCAtNDksNiArOTEsNyBAQAogCSAgLVAgaG9zdCAtQyAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpIC1EICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvdG9vbHMgXAogCSAgLVAgaG9zdCAtQyAkKEhPU1RfT1VUKSAtbCAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2hvc3QubGlzdCBcCiAJICAtUCB0YXJnZXQgLUMgJChQUk9EVUNUX09VVCkgLWwgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS90YXJnZXQubGlzdCBcCisJICAtUCBob3N0IC1DICQoSE9TVF9PVVQpIC1sICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvaG9zdC1zaGFyZWQtbGlicy5saXN0IFwKIAkgIC1zaGEyNTYKIAkkKFNPT05HX1pJUCkgLWQgLW8gJChQUklWQVRFX2dlbmVyYWxfdGVzdHNfY29uZmlnc196aXApIFwKIAkgIC1QIGhvc3QgLUMgJChIT1NUX09VVCkgLWwgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9ob3N0LXRlc3QtY29uZmlncy5saXN0IFwKQEAgLTY5LDMgKzExMiw4IEBACiBnZW5lcmFsX3Rlc3RzX2xpc3RfemlwIDo9CiBnZW5lcmFsX3Rlc3RzX2NvbmZpZ3NfemlwIDo9CiBnZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJzX3ppcCA6PQorbXlfaG9zdF9zaGFyZWRfbGliX2Zvcl9nZW5lcmFsX3Rlc3RzIDo9CitteV9zeW1saW5rc19mb3JfZ2VuZXJhbF90ZXN0cyA6PQorbXlfZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGliX2ZpbGVzIDo9CitteV9nZW5lcmFsX3Rlc3RzX3N5bWxpbmtzIDo9CitteV9ob3N0X3NoYXJlZF9saWJfc3ltbGlua3MgOj0KZGlmZiAtLWdpdCBhL2NvcmUvdGFza3MvbW9kdWxlLWluZm8ubWsgYi9jb3JlL3Rhc2tzL21vZHVsZS1pbmZvLm1rCmluZGV4IDBjYTI3ZDguLmRkMDFmOTYgMTAwNjQ0Ci0tLSBhL2NvcmUvdGFza3MvbW9kdWxlLWluZm8ubWsKKysrIGIvY29yZS90YXNrcy9tb2R1bGUtaW5mby5tawpAQCAtNTAsNiArNTAsOCBAQAogCQkJJChjYWxsIHdyaXRlLW9wdGlvbmFsLWpzb24tbGlzdCwgImhvc3RfZGVwZW5kZW5jaWVzIiwgJChzb3J0ICQoQUxMX01PRFVMRVMuJChtKS5IT1NUX1JFUVVJUkVEX0ZST01fVEFSR0VUKSkpIFwKIAkJCSQoY2FsbCB3cml0ZS1vcHRpb25hbC1qc29uLWxpc3QsICJ0YXJnZXRfZGVwZW5kZW5jaWVzIiwgJChzb3J0ICQoQUxMX01PRFVMRVMuJChtKS5UQVJHRVRfUkVRVUlSRURfRlJPTV9IT1NUKSkpIFwKIAkJCSQoY2FsbCB3cml0ZS1vcHRpb25hbC1qc29uLWJvb2wsICJ0ZXN0X21vZHVsZV9jb25maWdfYmFzZSIsICQoQUxMX01PRFVMRVMuJChtKS5URVNUX01PRFVMRV9DT05GSUdfQkFTRSkpIFwKKwkJCSQoY2FsbCB3cml0ZS1vcHRpb25hbC1qc29uLWJvb2wsICJtYWtlIiwgJChpZiAkKEFMTF9NT0RVTEVTLiQobSkuSVNfU09PTkdfTU9EVUxFKSwsdHJ1ZSkpIFwKKwkJCSQoY2FsbCB3cml0ZS1vcHRpb25hbC1qc29uLWJvb2wsICJtYWtlX2dlbmVyYXRlZF9tb2R1bGVfaW5mbyIsIHRydWUpIFwKIAkJJ30nKSdcbn1cbicgPj4gJEAudG1wCiAJJChQUklWQVRFX01FUkdFX0pTT05fT0JKRUNUUykgLW8gJEAgJChQUklWQVRFX1NPT05HX01PRFVMRV9JTkZPKSAkQC50bXAKIAlybSAkQC50bXAKZGlmZiAtLWdpdCBhL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vQW5kcm9pZC5icCBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGQwMGI1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIHsKKyAgICBkZWZhdWx0X2FwcGxpY2FibGVfbGljZW5zZXM6IFsiQW5kcm9pZC1BcGFjaGUtMi4wIl0sCit9CisKK2phdmFfbGlicmFyeSB7CisgICAgbmFtZTogImlkZV9xdWVyeV9wcm9iZXJzY3JpcHRfanZtIiwKKyAgICBzcmNzOiBbCisgICAgICAgICJGb28uamF2YSIsCisgICAgICAgICJCYXIuamF2YSIsCisgICAgICAgICJvdGhlci9PdGhlci5qYXZhIiwKKyAgICBdLAorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9CYXIuamF2YSBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vQmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1MTU3NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vQmFyLmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBqdm07CisKKy8qKiBCYXIgY2xhc3MuIFRoZSBjbGFzcyBmb3IgdGVzdGluZyBjb2RlIGFzc2lzdCB3aXRoaW4gdGhlIHNhbWUgYnVpbGQgbW9kdWxlLiAqLworY2xhc3MgQmFyPEsgZXh0ZW5kcyBOdW1iZXIsIFYgZXh0ZW5kcyBOdW1iZXI+IHsKKyAgQmFyKCkgeworICAgIGZvbyhuZXcgRm9vKCkpOworICB9CisKKyAgdm9pZCBmb28oRm9vIGYpIHt9CisKKyAgdm9pZCBmb28oT2JqZWN0IG8pIHt9CisKKyAgdm9pZCBiYXIoRm9vIGYpIHt9CisKKyAgdm9pZCBiYXooT2JqZWN0IG8pIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9Gb28uamF2YSBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vRm9vLmphdmEKaW5kZXggYTA0M2Y3Mi4uOTM5N2JjNCAxMDA2NDQKLS0tIGEvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9Gb28uamF2YQorKysgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL0Zvby5qYXZhCkBAIC0xNiwyMiArMTYsMTA5IEBACiAKIHBhY2thZ2UganZtOwogCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqdm0ub3RoZXIuT3RoZXI7CiAKIC8qKiBGb28gY2xhc3MuICovCiBwdWJsaWMgZmluYWwgY2xhc3MgRm9vIHsKKy8vICAgICAgICAgICAgICAgfCAgfCBmb29fZGVmCisKKyAgdm9pZCB0ZXN0UGFyYW1ldGVySW5mbygpIHsKKyAgICAvLyBUZXN0IHNpZ25hdHVyZSBoZWxwIGZvciB0eXBlIHBhcmFtZXRlcnMuCisKKyAgICBCYXI8SW50ZWdlciwgRG91YmxlPiBiID0gbmV3IEJhcjw+KCk7CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiBjdG9yCisgICAgLy8gICAgIF4gZGVjbF8xCisgICAgLy8gICAgICAgICAgICAgIF4gZGVjbF8yCisgICAgU3lzdGVtLm91dC5wcmludGxuKGIpOworCisgICAgLy8gc3RlcCBhdCBjdG9yCisgICAgLy8gd29ya3NwYWNlLndhaXRGb3JSZWFkeSgpCisgICAgLy8gcGFyYW1pbmZvLnRyaWdnZXIoKQorICAgIC8vIGFzc2VydCBwYXJhbWluZm8uaXRlbXMuZmlsdGVyKAorICAgIC8vICBsYWJlbD0iSyBleHRlbmRzIE51bWJlciwgViBleHRlbmRzIE51bWJlciIsCisgICAgLy8gIHNlbGVjdGlvbj0iSyBleHRlbmRzIE51bWJlciIsCisgICAgLy8gKQorCisgICAgLy8gc3RlcCBhdCBkZWNsXzEKKyAgICAvLyB3b3Jrc3BhY2Uud2FpdEZvclJlYWR5KCkKKyAgICAvLyBwYXJhbWluZm8udHJpZ2dlcigpCisgICAgLy8gYXNzZXJ0IHBhcmFtaW5mby5pdGVtcy5maWx0ZXIoCisgICAgLy8gIGxhYmVsPSJLIGV4dGVuZHMgTnVtYmVyLCBWIGV4dGVuZHMgTnVtYmVyIiwKKyAgICAvLyAgc2VsZWN0aW9uPSJLIGV4dGVuZHMgTnVtYmVyIiwKKyAgICAvLyApCisKKyAgICAvLyBzdGVwIGF0IGRlY2xfMgorICAgIC8vIHdvcmtzcGFjZS53YWl0Rm9yUmVhZHkoKQorICAgIC8vIHBhcmFtaW5mby50cmlnZ2VyKCkKKyAgICAvLyBhc3NlcnQgcGFyYW1pbmZvLml0ZW1zLmZpbHRlcigKKyAgICAvLyAgbGFiZWw9IksgZXh0ZW5kcyBOdW1iZXIsIFYgZXh0ZW5kcyBOdW1iZXIiLAorICAgIC8vICBzZWxlY3Rpb249IlYgZXh0ZW5kcyBOdW1iZXIiLAorICAgIC8vICkKKworICAgIC8vIFRlc3Qgc2lnbmF0dXJlIGhlbHAgZm9yIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuCisKKyAgICBPdGhlciBvdGhlciA9IG5ldyBPdGhlcigxMjMsICJmb28iKTsKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgXiBwYXJhbV8xCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gcGFyYW1fMgorICAgIFN5c3RlbS5vdXQucHJpbnRsbihvdGhlcik7CisKKyAgICAvLyBzdGVwIGF0IHBhcmFtXzEKKyAgICAvLyB3b3Jrc3BhY2Uud2FpdEZvclJlYWR5KCkKKyAgICAvLyBwYXJhbWluZm8udHJpZ2dlcigpCisgICAgLy8gYXNzZXJ0IHBhcmFtaW5mby5pdGVtcy5maWx0ZXIoCisgICAgLy8gIGxhYmVsPSJcXChpbnQgZmlyc3QsIFN0cmluZyBzZWNvbmRcXCkiLAorICAgIC8vICBzZWxlY3Rpb249ImludCBmaXJzdCIsCisgICAgLy8gKQorCisgICAgLy8gc3RlcCBhdCBwYXJhbV8yCisgICAgLy8gd29ya3NwYWNlLndhaXRGb3JSZWFkeSgpCisgICAgLy8gcGFyYW1pbmZvLnRyaWdnZXIoKQorICAgIC8vIGFzc2VydCBwYXJhbWluZm8uaXRlbXMuZW1wdHkoKQorICB9CiAKICAgdm9pZCB0ZXN0Q29tcGxldGlvbigpIHsKLSAgICBBcnJheUxpc3Q8SW50ZWdlcj4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaXN0KTsKKyAgICBCYXI8SW50ZWdlciwgRG91YmxlPiBiID0gbmV3IEJhcjw+KCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGIpOwogCiAgICAgLy8gXgogCiAgICAgLy8gc3RlcAotICAgIC8vIDsgVGVzdCBjb21wbGV0aW9uIG9uIHRoZSBzdGFuZGFyZCB0eXBlcy4KLSAgICAvLyB0eXBlKCJsaXN0LiIpCisgICAgLy8gOyBUZXN0IGNvbXBsZXRpb24gb24gdHlwZXMgZnJvbSB0aGUgc2FtZSBwYWNrYWdlLgorICAgIC8vIHdvcmtzcGFjZS53YWl0Rm9yUmVhZHkoKQorICAgIC8vIHR5cGUoImIuIikKICAgICAvLyBjb21wbGV0aW9uLnRyaWdnZXIoKQotICAgIC8vIGFzc2VydCBjb21wbGV0aW9uLml0ZW1zLmZpbHRlcihsYWJlbD0iYWRkLioiKQorICAgIC8vIGFzc2VydCBjb21wbGV0aW9uLml0ZW1zLmZpbHRlcihsYWJlbD0iZm9vLioiKQorICAgIC8vIGRlbGxpbmUoKQorCisgICAgT3RoZXIgb3RoZXIgPSBuZXcgT3RoZXIoMSwgImZvbyIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihvdGhlcik7CisKKyAgICAvLyBeCisKKyAgICAvLyBzdGVwCisgICAgLy8gOyBUZXN0IGNvbXBsZXRpb24gb24gdHlwZXMgZnJvbSBhIGRpZmZlcmVudCBwYWNrYWdlLgorICAgIC8vIHdvcmtzcGFjZS53YWl0Rm9yUmVhZHkoKQorICAgIC8vIHR5cGUoIm90aGVyLiIpCisgICAgLy8gY29tcGxldGlvbi50cmlnZ2VyKCkKKyAgICAvLyBhcHBseShjb21wbGV0aW9uLml0ZW1zLmZpbHRlcihsYWJlbD0ib3RoZXIuKiIpLmZpcnN0KCkpCisgICAgLy8gdHlwZSgiLiIpCisgICAgLy8gY29tcGxldGlvbi50cmlnZ2VyKCkKKyAgICAvLyBhcHBseShjb21wbGV0aW9uLml0ZW1zLmZpbHRlcihsYWJlbD0ib3RoZXIuKiIpLmZpcnN0KCkpCisgICAgLy8gZGVsbGluZSgpCisgIH0KKworICB2b2lkIHRlc3REaWFnbm9zdGljcygpIHsKKworICAgIC8vIF4KKworICAgIC8vIHN0ZXAKKyAgICAvLyA7IFRlc3QgZGlhZ25vc3RpY3MgYWJvdXQgd3JvbmcgdHlwZSBhcmd1bWVudCBib3VuZHMuCisgICAgLy8gd29ya3NwYWNlLndhaXRGb3JSZWFkeSgpCisgICAgLy8gdHlwZSgiQmFyPFN0cmluZywgRG91YmxlPiBiOyIpCisgICAgLy8gYXNzZXJ0IGRpYWdub3N0aWNzLml0ZW1zLmZpbHRlcigKKyAgICAvLyAgbWVzc2FnZT0idHlwZSBhcmd1bWVudCAuKiBpcyBub3Qgd2l0aGluIGJvdW5kcyAuKiIsCisgICAgLy8gIGNvZGU9ImNvbXBpbGVyLmVyci5ub3Qud2l0aGluLmJvdW5kcyIsCisgICAgLy8gKQorICAgIC8vIGRlbGxpbmUoKQogICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL2lkZV9xdWVyeS5vdXQgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL2lkZV9xdWVyeS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY5ZmI4NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vaWRlX3F1ZXJ5Lm91dApAQCAtMCwwICsxLDQgQEAKKworA291dDJYCis2YnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL0Zvby5qYXZhEgIIARoaaWRlX3F1ZXJ5X3Byb2JlcnNjcmlwdF9qdm06zgEKKxppZGVfcXVlcnlfcHJvYmVyc2NyaXB0X2p2bRABGjZidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vRm9vLmphdmEaNmJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9CYXIuamF2YRo+YnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL290aGVyL090aGVyLmphdmEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL290aGVyL090aGVyLmphdmEgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL290aGVyL090aGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIyNjYyYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vb3RoZXIvT3RoZXIuamF2YQpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGp2bS5vdGhlcjsKKworLyoqIE90aGVyIGNsYXNzICovCitwdWJsaWMgY2xhc3MgT3RoZXIgeworICBwdWJsaWMgT3RoZXIoaW50IGZpcnN0LCBTdHJpbmcgc2Vjb25kKSB7fQorCisgIHB1YmxpYyBPdGhlciBvdGhlcigpIHsKKyAgICByZXR1cm4gbmV3IE90aGVyKDAsICIiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWlzc2luZ19zb29uZ19tb2R1bGVfaW5mby5weSBiL3Rvb2xzL21pc3Npbmdfc29vbmdfbW9kdWxlX2luZm8ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmZhN2YyYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL21pc3Npbmdfc29vbmdfbW9kdWxlX2luZm8ucHkKQEAgLTAsMCArMSw1MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIworIyBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaW1wb3J0IGpzb24KK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitkZWYgbWFpbigpOgorICAgIHRyeToKKyAgICAgICAgcHJvZHVjdF9vdXQgPSBvcy5lbnZpcm9uWyJBTkRST0lEX1BST0RVQ1RfT1VUIl0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkNhbid0IGdldCBBTkRST0lEX1BST0RVQ1RfT1VULiBSdW4gbHVuY2ggZmlyc3QuXG4iKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ocHJvZHVjdF9vdXQsICJtb2R1bGUtaW5mby5qc29uIikKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSkgYXMgZjoKKyAgICAgICAgICAgIG1vZHVsZXMgPSBqc29uLmxvYWQoZikKKyAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoZiJGaWxlIG5vdCBmb3VuZDoge2ZpbGVuYW1lfVxuIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBleGNlcHQganNvbi5KU09ORGVjb2RlRXJyb3I6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoZiJJbnZhbGlkIGpzb246IHtmaWxlbmFtZX1cbiIpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBjbGFzc2VzID0ge30KKworICAgIGZvciBuYW1lLCBpbmZvIGluIG1vZHVsZXMuaXRlbXMoKToKKyAgICAgICAgbWFrZSA9IGluZm8uZ2V0KCJtYWtlIikKKyAgICAgICAgbWFrZV9nZW4gPSBpbmZvLmdldCgibWFrZV9nZW5lcmF0ZWRfbW9kdWxlX2luZm8iKQorICAgICAgICBpZiBub3QgbWFrZSBhbmQgbWFrZV9nZW46CisgICAgICAgICAgICBjbGFzc2VzLnNldGRlZmF1bHQoZnJvemVuc2V0KGluZm8uZ2V0KCJjbGFzcyIpKSwgW10pLmFwcGVuZChuYW1lKQorCisgICAgZm9yIGNsLCBuYW1lcyBpbiBjbGFzc2VzLml0ZW1zKCk6CisgICAgICAgIHByaW50KCIgIi5qb2luKGNsKSkKKyAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICBwcmludCgiICIsIG5hbWUpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCg==